• 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类的用法,比如:坐标的转换等。

  • 相关阅读:
    C阶段【01】
    Xcode常用快捷键的使用
    eclipse中添加web app libraries
    hibernate 连接SQL SERVER2008
    hibernate配置入门(个人总结)
    项目编译PNG报错
    项目archive打包编译报错
    项目上传
    Git本地项目上传,版本管理工具与GitHub的简单结合使用
    将制定目录下的内容复制到另一个路径下
  • 原文地址:https://www.cnblogs.com/atong/p/3269929.html
Copyright © 2020-2023  润新知