Cocos2d-x学习笔记(四)之 导演类CCDirector

  今天来学习cocos2d-x中非常重要的一个类,它管理整个游戏的开始、结束、暂停等,可以说它就是我们游戏的总指挥,那么它就是我们的导演类CCDirector。下面让我们一起来学习一下导演类CCDirector。

  CCDirector类是Cocos2d-x游戏引擎的核心,它用来创建并且控制着主屏幕的显示,同时控制场景的显示时间和显示方式。在整个游戏里一般只有一个导演。游戏的开始、结束、暂停都会调用CCDirector类的方法。CCDirector类具有如下功能:

  1)初始化OpenGL会话。

  2)设置OpenGL的一些参数和方式。

  3)访问和改变创景以及访问Cocos2d-x的配置细节。

  4)访问视图。

  5)设置投影和朝向。

  需要说明的是:CCDirector是单例模式,调用CCDirector的方法的标准方式如下:

1 CCDirector::sharedDirector()->函数名

  CCDirector类的继承关系如下:

  CCDisplayLinkDirector-->CCDirector-->CCObject-->CCCopying。

  CCDisplayLinkDirector继承了CCDirector,是一个可以自动刷新的导演类。它只支持1/60、1/30和1/15三种动画间隔(帧间隔)。

  在Cocos2d-x里面,在游戏的任何时间,只有一个场景对象实例处于运行状态,而导演就是流程的总指挥,它负责游戏全过程的场景切换,也也是典型的面向对象和分层的设计原则。下面分别介绍CCDirector类的成员数据和方法。

  成员数据:CCDirector类没有公共的成员数据,保护成员数据如下:

  m_pScheduler :绑定导演类的调度对象。

  m_pActionManager :绑定导演类的动作管理对象。

  m_pTouchDispatcher :绑定导演类的触屏调度对象。

  m_pKeypadDispatcher :绑定导演类的键盘调度对象。

  m_pAccelerometer :绑定导演类的加速度传感器对象。

  m_bPaused :导演是运行还是暂停。

  m_pRunningScene :正在运行的场景类。

  m_pNextScene :下一个场景类。

  m_fDeltaTime :帧间隔的时间。

  m_obWinSizeInPoints :坐标点型的屏幕尺寸。

  m_obWinSizeInPixels :像素级的屏幕尺寸。

  成员函数

  getRunningScene:获得当前正在运行的场景。

  getAnimationInterval:获得每帧的时间。

  setAnimationInterval:设置每帧的时间。

  isDisplayStats:返回是否在屏幕左下角显示每帧的时间。

  setDisplayStats:设置是否在屏幕左下角显示每帧的时间。

  getSecondsPerFrame:获得每帧的时间(单位为秒)。

  getOpenGLView:获得绘制所有对象的OpenGL视图。

  setOpenGLView:设置绘制所有对象的OpenGL视图。

  isPaused:获得导演类对象是否暂停。

  getTotalFrames:获得从导演类开始运行的帧数。

  getProjection:获得OpenGL的投影。

  setProjection:设置OpenGL的投影。

  getNotificationNode:获得一个节点对象,这个节点对象在主场景被遍历后被遍历。

  enableRetinaDisplay:是否是视网膜版的显示。

  getWinSize:获得屏幕大小(单位为点)。

  getWinSizeInPixels:获得像素级的屏幕大小,单位为像素,只是视网膜版本遇上一个返回值不同。

  reshapeProjection:改变投影的大小。

  convertToGL:从UI体系的坐标转换为OpenGL的坐标。

  convertToUI:从OpenGL的坐标转换为UI体系的坐标。

  runWithScene:运行当前的场景。

  popScene:弹出当前场景,将它从栈顶弹出。

  pushScene:悬挂当前场景,压入栈中。

  popToRootScene:弹出所有场景,直到根场景。

  replaceScene:替换当前场景。

  end:结束游戏。

  pause:暂停游戏。

  resume:重启被暂停的场景,被暂停的时间调度也重新激活。

  stopAnimation:停止动画。

  startAnimation:开始动画。

  drawScene:绘制场景。

  prugeCachedData:清除缓存数据。

  setGLDefaultValues:将OpenGL参数设置为默认值。

  setAlphaBlending:设置OpenGL是否采用Alpha通道。

  setDepthTest:设置是否测试景深。

  getTouchDispatcher:获得触屏调度对象。

  setTouchDispatcher:设置触屏调度对象。

  getKeypadDispatcher:获取键盘调度。

  setKeypadDispatcher:设置键盘调度。

  getAccelerometer:获得加速度传感器。

  setAccelerometer:设置加速度传感器。

  getActionManager:获得动作管理对象。

  setActionManager:设置动作管理对象。

  getScheduler:获得调度对象。

  setScheduler:设置调度对象。

 

下面来看一下CCDirector类的使用:

CCDirector类在游戏初始化中的应用

 1     //获得导演类
 2     CCDirector* pDirector = CCDirector::sharedDirector();
 3     CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
 4 
 5     //设置OpenGL视图
 6     pDirector->setOpenGLView(pEGLView);
 7     
 8     //设置是否显示每帧时间
 9     pDirector->setDisplayStats(true);
10 
11     // 设置每帧时间
12     pDirector->setAnimationInterval(1.0 / 60);
13 
14     // 创建场景
15     CCScene *pScene = HelloWorld::scene();
16 
17     // 运行场景
18     pDirector->runWithScene(pScene);

在游戏进入后台或者从后台返回时,分别调用相应的方法停止动画和开始动画:

1 //停止动画
2 void AppDelegate::applicationDidEnterBackground() {
3     CCDirector::sharedDirector()->stopAnimation();
4 }
5 
6 // 开始动画
7 void AppDelegate::applicationWillEnterForeground() {
8     CCDirector::sharedDirector()->startAnimation();
9 }

在手机由外部事件进入时,也会将当前界面暂停,比如来电话时:

1 //暂停场景
2 CCDirector::sharedDirector()->pause();
3 
4 //重启被暂停的场景
5 CCDirector::sharedDirector()->resume();

在游戏结束的时候,同样需要使用导演类来结束,如下:

1 //结束游戏
2 CCDirector::sharedDirector()->end();
3 
4 #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
5     exit(0);
6 #endif

从以上的所有信息中可以看出,导演类就是一个管理游戏的指挥官,导演类就先介绍到这里,当然之后还会接触到一些CCDirector类的用法,比如:坐标的转换等。

posted @ 2013-08-20 12:23  【Winco】  阅读(1236)  评论(0编辑  收藏  举报