CCDirector类是游戏的组织和控制中心(总指挥),它控制着主屏幕的显示、场景的切换和显示,以及游戏的开始、结束和暂停。它的继承关系图如下:

   CCDirector继承自基类CCObject,它还有一个子类CCDisplayLinkDirector,它是一个可以自动刷新的CCDirector。CCDirector包括的核心功能如下:
   ·初始化OpenGL和设置OpenGL参数;
   ·控制场景管理和切换;
   ·设置Cocos2D的配置细节;
   ·访问视图(OpenGL、UIView、UIWindow)
 
下面查看一下,CCDirector的内部结构和功能:
 
   ·CCDirector属性:
     CCScene* m_pRunningScene:当前运行的场景
     CCScene* m_pNextScene:下一个将要运行的场景
     CCArray* m_pobScenesStack:场景堆栈指针
     CCScheduler* m_pScheduler:支持调度
     CCActionManager* m_pActionManager:支持动作管理
     CCTouchDispatcher* m_pTouchDispatcher:触屏事件分发
     CCKeypadDispatcher* m_pKeypadDispatcher:支持键盘
     CCAccelerometer* m_pAccelerometer:支持加速度传感器
     bool m_bPaused:是否暂停游戏
     float m_fDeltaTime:帧间隔的时间
     CCSize m_obWinSizeInPoints:坐标点型的屏幕尺寸
     CCSize m_obWinSizeInPixels:像素级的屏幕尺寸
 
   ·CCDirector方法:
     CCScene* getRunningScene(void):获取当前运行的场景
     double getAnimationInterval(void):获取当前FPS(表示帧数,60是一般游戏的常用帧数)
     void setAnimationInterval(double dValue):设置FPS
     bool isDisplayStats(void):屏幕左下角是否显示每帧的时间
     void setDisplayStats(bool bDisplayStats):设置在屏幕左下角显示每帧的时间
     float getSecondsPerFrame():获取每帧的时间
     CCEGLView* getOpenGLView(void):获取绘制所有对象的OpenGL视图
     setOpenGLView(CCEGLView *pobOpenGLView):设置绘制所有对象的OpenGL视图
     void setGLDefaultValues(void):将OpenGL参数设置为默认值
     void setAlphaBlending(bool bOn):设置OpenGL是否使用Alpha通道
     bool isPaused(void):CCDirector对象是否暂停
     unsigned int getTotalFrames(void):获取运行的总帧数
     ccDirectorProjection getProjection(void):获取OpenGL的投影
     setProjection(ccDirectorProjection kProjection):设置OpenGL的投影
     bool isSendCleanupToScene(void):场景替换时,是否接收到cleanup时间,若新的的场景是被push进来的,旧的场景不会收到cleanup 事件,若新的场景是被替换进来的,旧的场景就能够收到cleanup事件。
     CCSize getWinSize(void):获取OpenGL视图屏幕大小(单位/点)
     CCSize getWinSizeInPixels(void):获取OpenGL视图屏幕大小(单位/像素)
     CCSize getVisibleSize():获取可视区域大小
     CCPoint getVisibleOrigin():获取可视区域起点
     void reshapeProjection(const CCSize& newWindowSize):改变投影的大小
     CCPoint convertToGL(const CCPoint& obPoint):将世界坐标系转化为OpenGL坐标系
     CCPoint convertToUI(const CCPoint& obPoint); 将OpenGL坐标系转化为世界坐标系
     void runWithScene(CCScene *pScene):运行场景
     void pushScene(CCScene *pScene):场景压栈
     void popScene(void):场景出栈
     void popToRootScene(void):弹出所有场景,至到根场景
     void replaceScene(CCScene *pScene):替换场景
     void end(void):结束游戏
     void pause(void):暂停游戏
     void resume(void):恢复游戏
     void mainLoop(void):游戏主循环
     void stopAnimation(void):停止动画
     void startAnimation(void):开始动画
     void drawScene(void):绘制场景
     void purgeCachedData(void):清除缓存数据
     void setDepthTest(bool bOn):设置是否测试景深
    以上这些就是CCDirector的主要属性和方法。需要提及的是,CCDirector是单例模式,这样在代码任何地方都可以调用CCDirector从而控制游戏。在Cocos2D-x中,在游戏的任何时间,只有一个场景对象实例处于运行状态,CCDirector负责游戏全过程的场景切换。其实,这是一种典型的面向对象和分层的设计原则,目的是减少对象之间的关系。
    既然CCDirector是游戏的控制中心,那么在游戏初始化的时候肯定会调用CCDirector,代码如下:
bool AppDelegate::applicationDidFinishLaunching()
{
    // initialize director
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
 
    TargetPlatform target = getTargetPlatform();
   
    if (target == kTargetIpad)
    {
        // ipad
 
        if (pDirector->enableRetinaDisplay(true))
        {
            // ipad hd
            CCFileUtils::sharedFileUtils()->setResourceDirectory("ipadhd");
        }
        else
        {
            CCFileUtils::sharedFileUtils()->setResourceDirectory("ipad");
        }
    }
    else if (target == kTargetIphone)
    {
        // iphone
       
        if (pDirector->enableRetinaDisplay(true))
        {
            // iphone hd
            CCFileUtils::sharedFileUtils()->setResourceDirectory("hd");
        }
    }
 
    // turn on display FPS
    pDirector->setDisplayStats(true);
 
    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);
 
    CCScene * pScene = CCScene::create();
    CCLayer * pLayer = new TestController();
    pLayer->autorelease();
 
    pScene->addChild(pLayer);
    pDirector->runWithScene(pScene);
 
    return true;
}
   这段代码的applicationDidFinishLaunching函数在程序App初始化时会被调用,CCDirector一般被调用,完成一些游戏的初始化和设置工作。
   再次强调,CCDirector是Cocos2D-x的控制类,它的作用和功能需要非常熟悉,才能在开发过程中得心应手。
 -------------------------------------------------------------------------------------------------------------------------------------------------------------

注:本人在本博客的原创文章采用创作共用版权协议http://creativecommons.org/licenses/by-nc-sa/2.5/cn/), 要求署名、非商业用途和保持一致。要求署名包含注明我的网名及文章来源(我的博客地址:http://www.cnblogs.com/binbingg)。

[原创]cocos2d-x研习录-第二阶 概念类之导演类(CCDirector)的更多相关文章

  1. [原创]cocos2d-x研习录-第二阶 概念类之节点类(CCNode)

    节点类CCNode在基本概念中并不存在,它是为了建立基本概念之间的关联关系而抽象出来的中间辅助类.这个类在Cocos2D-x中极为重要,它为概念类之间搭建了一座宏伟的桥梁.它的继承关系图如下:     ...

  2. [原创]cocos2d-x研习录-第二阶 概念类之精灵类(CCSprite)

    上一节说布景层CCLayer是小容器,那么精灵类CCSprite就是容器添加的内容,它是构成游戏的主要元素.精灵这个名称应该是游戏专用,它表示游戏中玩家操作的主角.敌人.NPC(Non Player ...

  3. [原创]cocos2d-x研习录-第二阶 概念类之场景类(CCScene)

    场景类CCScene是Cocos2D-x在屏幕显示的内容,相当于游戏关卡或界面.CCDirector任何时候只能显示一个场景CCScene,游戏中可能存在若干场景,CCDirector通过场景切换达到 ...

  4. [原创]cocos2d-x研习录-第二阶 概念类之摄相机类(CCCamera)

    在Cocos2D-x中,每个CCNode都拥有一个摄像机类CCCamera.只有通过CCCamera,CCNode才会被渲染出来.当CCNode发生缩放.旋转和位置变化时,都需要覆盖CCCamera, ...

  5. [原创]cocos2d-x研习录-第二阶 概念类之布场层类(CCLayer)

    上面说场景CCScene相当于一个大容器,那么布景层类CCLayer就是大容器里的若干个小容器.每个游戏场景CCScene会有很多层CCLayer,每一层CCLayer负责各自的任务.看一下CCLay ...

  6. [原创]cocos2d-x研习录-第二阶 基本框架

    了解完Cocos2D-x的基本概念和概念类之后,是不是有一种蠢蠢欲动的冲动,想要探究Cocos2D-x是如何完成这一切的.接着我将通过对Cocos2D-x自代的HelloCpp项目进行分析,初步了解C ...

  7. [原创]cocos2d-x研习录-第二阶 基本概念

    在Cocos2D-x引擎中,有几个非常重要的概念:导演(CCDirector).摄像机(CCCamera).场景(CCSecen).布景(CCLayer).精灵(CCSPrite)和动作(CCActi ...

  8. [原创]cocos2d-x研习录—前言

    我认为很多开发者面对层出不穷的新技术.新思想和新理念,最为之苦恼的是找不到行之有效的学习方法,对于知识的本质缺乏认识,虽阅读了大量教材,却无法将其融入自己的知识体系,并搭建自己的知识树.不可否认,教材 ...

  9. [原创]cocos2d-x研习录-第三阶 特性之动作

    在前面的Cocos2D-x的概念类中,我们了解到节点类CCNode.导演类CCDirector.场景类CCScene.布景层类CCLayer和精灵类CCSprite等,这些类都是构成游戏画面的基本元素 ...

随机推荐

  1. iOS MD5加密字符串

    参考:http://stackoverflow.com/questions/1524604/md5-algorithm-in-objective-c 在线测试MD5:http://www.cmd5.c ...

  2. python的异常小结与assert

    异常的处理 一. 二. -----------------2016-4-20 18:04:06--

  3. 转!mysql 查询 distinct多个字段 注意!!

    前几天做项目时,mysql写了个sql, distinct  id,col1,col2,...  结果出来了多条同个ID的记录,百度了下..... 下面先来看看例子: table  id name  ...

  4. 【转】从 ArcGIS for Desktop 发布地图服务

    原文链接:http://resources.arcgis.com/zh-CN/help/tutorials/01z300000007000000.htm 本教程的目的是将地图服务直接从 ArcGIS ...

  5. 张艾迪(创始人):Hello.世界...

    The World No.1 Girl :Eidyzhang The World No.1 Internet Girl :Eidyzhang AOOOiA.global Founder :Eidyzh ...

  6. mousedown(function(){ return false; })作用

    mousedown(function(){ return false;});  阻止浏览器的默认行为.  比如a你加个空连接,可能会在当前页跳转, 你加了这句,就可以阻止a跳转,然后只执行js函数的代 ...

  7. jfinal 基本应用 --定时任务 QuartzPlugin

    jfinal 的定时器的使用: 项目中使用的maven管理器 1.导入要使用的包 2.添加Job类 配置参数 这个配置是jfinal-quartz 包中带的默认文档,即是默认加载的文档(其中还有一个q ...

  8. Objective-C( Foundation框架 一 常见的结构体)

    常见的结构体 (NSPoint,CGPoint).(NSRange,CGRange).(NSSize,CGSize) 苹果官方推荐使用CG开头的结构体 NSRange是Foundation框架中常见的 ...

  9. 连接英文字符集的ORACLE和调用存储过程问题及64位服务器连接ORACLE问题

    部署在IIS上的webservice连接英文字符集的ORACLE数据库出现问题“未在本地计算机上注册"MSDAORA.1"提供程序”,解决方案如下: 原因:如错误,64位系统未注册 ...

  10. Oracle权限管理详解

    Oracle权限管理详解 转载--CzmMiao的博客生活 Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级. ...