AKever

导航

Cocos2dx(1) 导演类 CCDirector

导演类 CCDirector 的解析

bool AppDelegate::applicationDidFinishLaunching()   
{   
      //初始化导演类   
      CCDirector *pDirector = CCDirector::sharedDirector();   
      pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());   
      //高分辨率屏幕(例如 Retina 屏幕)的资源管理   
      //pDirector->enableRetinaDisplay(true);   
      //启用 FPS 显示   
      pDirector->setDisplayStats(true);   
      //设置 FPS 上限。如果不加设置,则默认 FPS 上限为60   
      pDirector->setAnimationInterval(1.0 / 60);   
      //创建一个场景,场景是一个 autorelease 对象   
      CCScene *pScene = HelloWorld::scene();   
      //运行场景   
      pDirector->runWithScene(pScene);   
      return true;   
}  

 CCDirector 的工作确实跟导演非常类似,主要负责以下工作。 

 游戏呈现方面的设定,包括设定游戏呈现的窗口、FPS 显示、默认帧率上限、纹理颜色位宽等。 

 切换当前的游戏场景,暂停或恢复游戏场景的运行。 

  总而言之,游戏在 CCDirector的管理下完成了呈现设定与流程控制。 

CCDirector 扮演着全局大总管的角色,因而很自然地采用了单例的设计模式。在程序的任何地方,都可以通过下面的简单
代码访问到:CCDirector *pDirector = CCDirector::sharedDirector(); 

  在 CCDirector 中,我们定义了以下管理场景的方法。 

   runWithScene(CCScene* scene):启动游戏,并运行 scene 场景。这个方法在主程序启动时第一次启动主场景时调用。

   replaceScene(CCScene* scene):直接使用传入的 scene 替换当前场景来切换画面,当前场景将被释放。这是切换场景时最常用的方法。

    pushScene(CCScene*  scene):将当前运行中的场景暂停并压入到代执行场景栈中,再将传入的 scene 设置为当前运行场景。 

    popScene:释放当前场景,再从代执行场景栈中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,则直接结束
应用。与 pushScene 成对使用,可以达到形如由主界面进入设置界面,然后回到主界面的效果。

    pause:暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上。

    resume:恢复当前运行场景中被暂停的计时器和动作。它与 pause 配合使用。 

    end:结束场景,同时退出应用。 

值得注意的一点是,以上三种切换场景的方法(replaceScene、pushScene、popScene)均是先将待切换的场景完全加载完
毕后,才将当前运行的场景释放掉。所以,在新场景恰好完全加载完毕的瞬间,系统中同时存在着两个场景,这将是对内
存的一个考验,若不注意的话,切换场景可能会造成内存不足。

posted on 2014-01-21 17:27  AKever  阅读(315)  评论(0)    收藏  举报