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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值