Director
Director是控制游戏流程的主要组件。
bool AppDelegate::applicationDidFinishLaunching() { // 初始化导演类 auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if(!glview) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) glview = GLViewImpl::createWithRect("MyCppGame",Rect(0,designResolutionSize.width,designResolutionSize.height)); #else glview = GLViewImpl::create("MyCppGame"); #endif director->setOpenGLView(glview); } // 启用FPS显示 director->setDisplayStats(true); // 设置FPS上限。如果不加设置,则默认FPS上限为60 director->setAnimationInterval(1.0 / 60); // 设置设计解决方案 glview->setDesignResolutionSize(designResolutionSize.width,designResolutionSize.height,ResolutionPolicy::NO_BORDER); Size frameSize = glview->getFrameSize(); // 如果框架的高度大于中等大小的高度。 if (frameSize.height > mediumResolutionSize.height) { director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height,largeResolutionSize.width/designResolutionSize.width)); } //如果框架的高度大于小尺寸的高度。 else if (frameSize.height > smallResolutionSize.height) { director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height,mediumResolutionSize.width/designResolutionSize.width)); } // 如果框架的高度小于中等大小的高度。 else { director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height,smallResolutionSize.width/designResolutionSize.width)); } register_all_packages(); // 创建一个场景,场景是一个autorelease对象 auto scene = HelloWorld::createScene(); // 运行场景 director->runWithScene(scene); return true; }
游戏在Director的管理下完成了呈现设定与流程控制。Director负责以下工作:
1.游戏呈现方面的设定,包括设定游戏呈现的窗口、FPS显示、默认帧率上限、纹理颜色位宽等
2.切换当前的游戏场景,暂停或恢复游戏场景的运行
3.Director采用了单例模式,可以通过: auto director = Director::getInstance(); 访问到
4.Director::runWithScene(Scene *scene):启动游戏,并运行scene场景。这个方法在主程序启动时第一次启动主场景时调用
5.Director::replaceScene(Scene *scene):直接使用传入的scene替换当前场景来切换画面,当前场景将被释放。这是切换场景时最常用的方法
6.Director::pushScene(Scene *scene):将当前运行中的场景暂停并压入到代执行场景栈中,再将传入的scene设置为当前运行场景
7.Director::popScene(void):释放当前场景,再从代执行场景栈中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,则直接结束应用。与pushScene成对使用,可以达到形如主界面进入设置界面,然后回到主界面的效果。
8.Director::pause():暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上
9.Director::resume():恢复当前运行场景中被暂停的计时器和动作。它与pause配合使用
10.Director::end():结束场景,同时退出应用
11.三种切换场景的方法(replaceScene、pushScene、popScene)均是先将待切换的场景完全加载完毕后,才将当前运行的场景释放掉。所以,在新场景恰好完全加载完毕的瞬间,系统中会同时存在着两个场景,所以切换场景可能会导致内存不足。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|