3.2 导演类
CCDirector类是Cocos2D-x游戏引擎的核心,它用来创建并且控制着主屏幕的显示,同时控制场景的显示时间和显示方式。在整个游戏里一般只有一个导演。游戏的开始、结束、暂停都会调用CCDirector类的方法。CCDirector类具有如下功能。
初始化OpenGL会话。
设置OpenGL的一些参数和方式。
访问和改变场景以及访问Cocos2D-x的配置细节。
访问视图。
设置投影和朝向。
需要说明的是,CCDirector是单例模式,调用CCDirector方法的标准方式如下:
CCDirector::sharedDirector()->函数名
CCDirector类的继承关系如图3-8所示。
CCDisplayLinkDirector继承了CCDirector,是一个可以自动刷新的导演类。它只支持1/60 、1/30 和1/15三种动画间隔(帧间隔)。
在Cocos2D-x里面,在游戏的任何时间,只有一个场景对象实例处于运行状态,而导演就是流程的总指挥,它负责游戏全过程的场景切换,这也是典型的面向对象和分层的设计原则。下面分别介绍CCDirector类的成员数据和函数。
3.2.1 CCDirector类的成员数据
CCDirector类的主要保护成员数据如表3-4所示。
CCDirector类没有公共的成员数据,这些属性都不可以直接得到。
3.2.2 CCDirector类的函数
CCDirector类的主要公共函数如表3-5所示。
在2.0之前的版本中,曾经有设置导演类的函数,有4个导演类型,分别是kCCDirectorTypeNSTimer、kCCDirectorTypeMainLoop、kCCDirectorType-Thread MainLoop、kCCDirectorTypeDisplayLink。但是在2.0版本以后,这些函数已经成为历史了。
3.2.3 实例:CCDirector类的使用
由于CCDirector类是一个控制的类别,从创建项目的模板中,就可以看到CCDirector类在游戏初始化的应用,如代码清单3-6所示。
代码清单3-6 CCDirector类在游戏初始化的应用
bool AppDelegate::applicationDidFinishLaunching() {
// 获得导演类
CCDirector *pDirector = CCDirector::sharedDirector();
//设置OpenGL视图
pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());
//设置是否显示每帧时间
pDirector->setDisplayStats(true);
//设置每帧时间
pDirector->setAnimationInterval(1.0 / 60);
//创建场景
CCScene *pScene = HelloWorld::scene();
//运行场景
pDirector->runWithScene(pScene);
return true;
}
这段代码出自AppDelegate.cpp文件中的applicationDidFinishLaunching函数,首先获得导演类指针,然后设置OpenGL视图,设置是否显示每帧时间,设置每帧时间,然后创建并运行场景。这样初始化工作就完成了。
在游戏进入后台或者从后台返回时,分别调用相应的方法停止动画和开始动画,如代码清单3-7所示。
代码清单3-7 游戏进入后台或者从后台返回时导演类的工作
void AppDelegate::applicationDidEnterBackground() {
CCDirector::sharedDirector()->stopAnimation();
}
void AppDelegate::applicationWillEnterForeground() {
CCDirector::sharedDirector()->startAnimation();
}
在手机有外部事件进入时,也会将当前界面暂停,比如来电话的时候。
在游戏结束的时候,同样需要使用导演类的结束函数,如代码清单3-8所示。
代码清单3-8 导演类的结束方法
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
从以上例子可以看出,导演类就是一个管理游戏的指挥官。之后还会接触到一些CCDirector类的用法,包括坐标的转换等,这些会在触摸事件那部分做详细介绍。