《Cocos2D-x权威指南》——3.2 导演类

简介: 本节书摘来自华章计算机《Cocos2D-x权威指南》一书中的第3章,第3.2节,作者:满硕泉著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 导演类

CCDirector类是Cocos2D-x游戏引擎的核心,它用来创建并且控制着主屏幕的显示,同时控制场景的显示时间和显示方式。在整个游戏里一般只有一个导演。游戏的开始、结束、暂停都会调用CCDirector类的方法。CCDirector类具有如下功能。
初始化OpenGL会话。
设置OpenGL的一些参数和方式。
访问和改变场景以及访问Cocos2D-x的配置细节。
访问视图。
设置投影和朝向。
需要说明的是,CCDirector是单例模式,调用CCDirector方法的标准方式如下:

CCDirector::sharedDirector()->函数名

CCDirector类的继承关系如图3-8所示。

image


CCDisplayLinkDirector继承了CCDirector,是一个可以自动刷新的导演类。它只支持1/60 、1/30 和1/15三种动画间隔(帧间隔)。
在Cocos2D-x里面,在游戏的任何时间,只有一个场景对象实例处于运行状态,而导演就是流程的总指挥,它负责游戏全过程的场景切换,这也是典型的面向对象和分层的设计原则。下面分别介绍CCDirector类的成员数据和函数。
3.2.1 CCDirector类的成员数据
CCDirector类的主要保护成员数据如表3-4所示。
image

CCDirector类没有公共的成员数据,这些属性都不可以直接得到。
3.2.2 CCDirector类的函数
CCDirector类的主要公共函数如表3-5所示。
image
image
image

在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类的用法,包括坐标的转换等,这些会在触摸事件那部分做详细介绍。

相关文章
|
iOS开发 开发框架
|
缓存 JavaScript 前端开发
《Cocos2D-x权威指南》——3.5 精灵类
本节书摘来自华章计算机《Cocos2D-x权威指南》一书中的第3章,第3.5节,作者:满硕泉著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1070 0
|
缓存 前端开发 JavaScript
《Cocos2D-x权威指南》——3.3 场景类
本节书摘来自华章计算机《Cocos2D-x权威指南》一书中的第3章,第3.3节,作者:满硕泉著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1216 0
|
JavaScript
《Cocos2D权威指南》——3.3 CCScene场景类
本节书摘来自华章计算机《Cocos2D权威指南》一书中的第3章,第3.3节,作者:王寒,屈光辉,周雪彬著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1086 0
|
iOS开发 C++
《Cocos2D-x权威指南》——第3章 Cocos2D-x中的核心类
本节书摘来自华章计算机《Cocos2D-x权威指南》一书中的第3章,作者:满硕泉著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
887 0
《Cocos2D权威指南》——第3章 3.0 Cocos2D核心类
本节书摘来自华章计算机《Cocos2D权威指南》一书中的第3章,第3.0节,作者:王寒,屈光辉,周雪彬著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1014 0
|
容器
《Cocos2D-x权威指南》——3.6 摄像机类
本节书摘来自华章计算机《Cocos2D-x权威指南》一书中的第3章,第3.6节,作者:满硕泉著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1193 0