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. Android开发之各个语言

    Android开发之各个语言 1.进行源码开发遇到一个最基础的问题就是各个语言下的字串翻译,所以我们必须得清楚res文件夹下各个资源文件夹 2.如图:

  2. CAD打开文件总是弹出要求选择字体怎么办

    CAD打开文件总是弹出要求选择字体怎么办1.在C:\Documents and Settings\下搜索acad.fmp文件,双击用记事本打开acad.fmp文件,在最后添加内容,上面几行本来就有,不 ...

  3. 利用jsoup进行模拟登录

    因为工作的原因,近段时间开始接触jsoup.大概也弄清了用java来爬网页是怎样一个过程.特此,写篇日志以便他日方便查看. Jsoup是一个java平台的能够对xml文档结构的文档进行解析.有点类似于 ...

  4. MVC4中的Display Mode简介

    本文地址:http://www.cnblogs.com/egger/p/3400076.html  欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 今天学习MVC4时,看到一个不错的特性"vie ...

  5. 用hasOwnProperty获取对象自身的属性排除原型链

    今天遇到一个多层级的object. 需要判定每一层级的data下是否有title属性.在下图中展开的data自身其实是没有title的,但由于受到原型链__proto__的影响,在获取parent.d ...

  6. lodash接触:string-capitalize

    1.capitalize : _.capitalize([string='']) Capitalizes the first character of string. 参数 [string=''] ( ...

  7. 用c语言编写二分查找法

    二分法的适用范围为有序数列,这方面很有局限性. #include<stdio.h> //二分查找法 void binary_search(int a[],int start,int mid ...

  8. openwrt 的依赖找不到问题

    Openwrt报告库找不到Package * is missing dependencies for the following libraries: libc.so.6 或其他先检查系统里面有没有这 ...

  9. [转]虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理

    VMware网络配置详解一:三种网络模式简介 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其 中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这 ...

  10. poj 2777

    题意:两个操作:c l r x   l到r之间的颜色变成x q l r      询问l到r有多少种颜色 思路:记一个整数表示哪种颜色是否取了 这里真的是煞笔了,看到这一题第一直觉是异或,但是A^A= ...