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)均是先将待切换的场景完全加载完毕后,才将当前运行的场景释放掉。所以,在新场景恰好完全加载完毕的瞬间,系统中会同时存在着两个场景,所以切换场景可能会导致内存不足。
原文链接:https://www.f2er.com/cocos2dx/340887.html