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. webform简单控件

    表单元素: 文本类: text password textarea hidden text,password,textarea实现控件:textbox   textmode属性选择password或m ...

  2. 安装 SciPy 和 scikit-learn 升级pip 及pip基本命令表

    安装Scipy和scikit-learn出错,出错记录及当时最终解决办法 问题: 一.使用pip直接安装 直接pip install scipy C:\Users\Plain>pip insta ...

  3. TCP/IP协议学习(二) LWIP用户自定义配置文件解析

    LWIP协议支持用户配置,可以通过用户裁剪实现最优化配置,LWIP默认包含opts.h作为系统默认配置,不过通过添加lwipopts.h文件并包含在opts.h头文件之前就可以对lwip进行用户裁剪, ...

  4. 用spring的InitializingBean作初始化

    org.springframework.beans.factory包下有一个接口是InitializingBean 只有一个方法: /**  * Invoked by a BeanFactory af ...

  5. ASP.Net Web.config 中引用外部config文件

    1. 前提准备: Web.config file: <?xml version="1.0" encoding="utf-8"?><config ...

  6. 转帖-[教程] Win7精简教程(简易中度)2016年8月-0day

    [教程] Win7精简教程(简易中度)2016年8月 0day 发表于 2016-8-19 16:08:41  https://www.itsk.com/thread-370260-1-1.html ...

  7. Chinese culture

      文房四宝 笔墨纸砚是中国古代文人书房中必备的宝贝,被称为“文房四宝”.用笔墨书写绘画在 中国可追溯到五千年前.秦(前221---前206)时已用不同硬度的毛和竹管制笔:汉代(前206—公元220) ...

  8. HTML与XHTML

    HTML:超文本标记语言,基本的网页设计语言 XHTML:基于XML的严格版的HTML XHTML相对于HTML的区别: 标签正确嵌套.标签必须有结束标记.区分大小写.属性值要用双引号.id代替nam ...

  9. Objective-C( Foundation框架 一 字符串)

    Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...

  10. MVC、ORM、CURD、ActiveRecord、单一入口的概念

    MVC MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M).视图(V).控制器(C),它们各自处理自己的任务. 视图 :视图是用户看到并 ...