渲染框架之导演类(CCDirector)

38 篇文章 0 订阅

 

 http://www.tuicool.com/articles/aM7jIr
       


        提到“导演”一词,想必读者最先联想到的是电影。作为娱乐产业,游戏领域和电影领域有很多类似之处,比如在游戏领域中,也存在制作人的职位。不过,此时提及的“导演”可不是一个人,而是在渲染框架中,有一个类充当着导演的角色。在开始介绍Cocos2D-X引擎中的“导演”之前,请大家先想想在电影行业中的导演,通常在一部电影中承担怎样的工作。

一、导演类
          CCDirector类是Coco2D-X游戏引擎的核心,它用来创建并且控制着主屏幕的显示,同时控制场景的显示时间和显示方法。在整个游戏里一般只有一个导演。游戏的开始、结束、暂停都会调用CCDirector类的方法。CCDirector类具有如下的功能。
<1> 初始化OpenGL会话。
<2> 设置OpenGL的一些参数和方法。
<3> 访问和改变场景以及访问Cocos2D-X的配置细节。
<4> 访问视图。
<5> 设置投影和朝向。
CCDirector类的继承关系如下图所示。

       CCDisplayLinkDirector继承了CCDirector,是一个可以自动刷新的导演类。它支持60/1、1/30和1/15三种动画间隔(帧间隔)。
       在Cocos2D-X里面,在游戏的任何时间,只有一个场景对象实例处于运行状态,而导演就是流程的总指挥,它负责 游戏全过程的场景切换,这也是典型的面向对象和分层的设计原则。
需要说明的是: CCDirector是单例模式,调用CCDirector方法的标准方式如下。
1、CCDirector类的成员数据
 CCDirector类的主要保护成员数据如下图所示。


       CCDirector类没有公共的成员数据,这些属性都不可以直接得到。
2、CCDirector类的函数
CCDirector类的主要公共函数如下图所示。


二、实例:CCDirector类的使用
1、由于CCDirector类是一个控制的类别,从创建项目的模版中,就可以看到CCDirector类在游戏初始化的应用,如下代码所示。
boolAppDelegate::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视 图,设置是否显示每帧的时间,设置每帧的时间,然后创建并运行场景。这样初始化工作就完成了。 
2、在游戏进入后台或者从后台返回时,分别调用相应的方法停止动画和声音以及开始动画和声音,如下代码所示。
void AppDelegate::applicationDidEnterBackground()
{
   CCDirector::sharedDirector()->stopAnimation();
   SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
voidAppDelegate::applicationWillEnterForeground()
{
   CCDirector::sharedDirector()->startAnimation();
    SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
        在手机有外部事件进入时,也会将当前界面暂停,比如来电话的时候。 

3、在游戏结束的时候,同样需要使用导演类的结束函数,如下代码所示。
void HelloWorld::menuCloseCallback(CCObject*pSender)
{
    // 点击菜单按钮退出游戏
   CCDirector::sharedDirector()->end();
}
 这段代码在HelloWorldScene.cpp文件中。 
      从以上的例子可以看出,导演类就是一个管理游戏的指挥官。之后还会接触到一些CCDirector类的用法,包括坐标的转换等,这些会在触摸事件那部分做详细介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值