加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

读书笔记Cocos2d-x之Director

发布时间:2020-12-14 16:42:10 所属栏目:百科 来源:网络整理
导读:Director Director是控制游戏流程的主要组件。 bool AppDelegate::applicationDidFinishLaunching() { // 初始化导演类 auto director = Director::getInstance(); auto glview = director-getOpenGLView(); if(!glview) { #if (CC_TARGET_PLATFORM == CC_PL

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读