• 【Cocos2d-X开发学习笔记】第03期:渲染框架之导演类(CCDirector)的使用


    本系列学习教程使用的是cocos2d-x-2.1.4版本(截至目前为止最新稳定版) ,PC开发环境Windows7,C++开发环境VS2010        

           

            提到“导演”一词,想必读者最先联想到的是电影。作为娱乐产业,游戏领域和电影领域有很多类似之处,比如

    在游戏领域中,也存在制作人的职位。不过,此时提及的“导演”可不是一个人,而是在渲染框架中,有一个类充当

    着导演的角色。在开始介绍Cocos2D-X引擎中的“导演”之前,请大家先想想在电影行业中的导演,通常在一部电影

    中承担怎样的工作。

    一、导演类

             CCDirector类是Coco2D-X游戏引擎的核心,它用来创建并且控制着主屏幕的显示,同时控制场景的显示时间和显

    示方法。在整个游戏里一般只有一个导演。游戏的开始、结束、暂停都会调用CCDirector类的方法。CCDirector类具

    有如下的功能。

    <1> 初始化OpenGL会话。

    <2> 设置OpenGL的一些参数和方法。

    <3> 访问和改变场景以及访问Cocos2D-X的配置细节。

    <4> 访问视图。

    <5> 设置投影和朝向。

    CCDirector类的继承关系如下图所示。

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

    隔(帧间隔)。

           在Cocos2D-X里面,在游戏的任何时间,只有一个场景对象实例处于运行状态,而导演就是流程的总指挥,它负

    游戏全过程的场景切换,这也是典型的面向对象和分层的设计原则。

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

    // 获得导演类
        CCDirector *pDirector = CCDirector::sharedDirector();

    1、CCDirector类的成员数据

     CCDirector类的主要保护成员数据如下图所示。

           CCDirector类没有公共的成员数据,这些属性都不可以直接得到。

    2、CCDirector类的函数

    CCDirector类的主要公共函数如下图所示。

          

    二、实例:CCDirector类的使用

    1、由于CCDirector类是一个控制的类别,从创建项目的模版中,就可以看到CCDirector类在游戏初始化的应用,如

    下代码所示。

    bool AppDelegate::applicationDidFinishLaunching()
    {
        // 获得导演类
        CCDirector *pDirector = CCDirector::sharedDirector();
    
    	//设置OpenGL视图
        pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
    
        // 设置是否显示每帧的时间
        pDirector->setDisplayStats(true);
    
        // 设置每帧的时间
        pDirector->setAnimationInterval(1.0 / 60);
    
        // 创建场景
        CCScene *pScene = HelloWorld::scene();
    
        // 运行场景
        pDirector->runWithScene(pScene);
        return true;
    }      

             这段代码出自AppDelegate.cpp文件中的applicationDidFinishLaunching函数,首先获得导演类指针,然后设置

    OpenGL视图,设置是否显示每帧的时间,设置每帧的时间,然后创建并运行场景。这样初始化工作就完成了。

    2、在游戏进入后台或者从后台返回时,分别调用相应的方法停止动画和声音以及开始动画和声音,如下代码所示。

    void AppDelegate::applicationDidEnterBackground()
    {
        CCDirector::sharedDirector()->stopAnimation();
    
        SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
    }
    
    void AppDelegate::applicationWillEnterForeground()
    {
        CCDirector::sharedDirector()->startAnimation();
    
        SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    }

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

    3、在游戏结束的时候,同样需要使用导演类的结束函数,如下代码所示。

    void HelloWorld::menuCloseCallback(CCObject* pSender)
    {
        // 点击菜单按钮退出游戏
        CCDirector::sharedDirector()->end();
    }

     这段代码在HelloWorldScene.cpp文件中。

          

          从以上的例子可以看出,导演类就是一个管理游戏的指挥官。之后还会接触到一些CCDirector类的用法,包括坐

    标的转换等,这些会在触摸事件那部分做详细介绍。

    源码下载地址

  • 相关阅读:
    bzoj1626[Usaco2007 Dec]Building Roads 修建道路*
    bzoj1610[Usaco2008 Feb]Line连线游戏*
    bzoj1666[Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏*
    bzoj1679[Usaco2005 Jan]Moo Volume 牛的呼声*
    bzoj1606[Usaco2008 Dec]Hay For Sale 购买干草*
    bzoj1264[AHOI2006]基因匹配Match
    bzoj4518[Sdoi2016]征途
    bzoj2049[Sdoi2008]Cave 洞穴勘测
    bzoj4514[Sdoi2016]数字配对
    bzoj2429[HAOI2006]聪明的猴子
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3202846.html
Copyright © 2020-2023  润新知