cocos2d-x札记 (二)----CCDirector深入

前端之家收集整理的这篇文章主要介绍了cocos2d-x札记 (二)----CCDirector深入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

以下内容基于cocos2d-x 2.2.5+Visual Studio2012,除特别注明外均为原创,如有纰漏,请m本人-_-


上一节已经弄明白了HelloWorld运行过程,相信大家对cocos2d-x有个大致了解

现在来看看CCDirector,中文名“导演”,官方对于她是这样介绍的:

这个类被用来创建和处理主窗体,并管理如何执行或何时执行场景.

CCDirector也负责:

--初始化OpenGL Context;
--设置OpenGL像素格式(默认是RGB565);
--设置OpenGL缓冲深度;
--设置投影(projection)规则(默认3D);
--设置方向(默认竖直方向);

由于CCDirector是个单例,所以通过CCDirector::sharedDirector()来访问方法;

我们还记得上一节中显示HelloWorld界面中是这样显示

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    CCDirector* pDirector = CCDirector::sharedDirector();
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
 
    pDirector->setOpenGLView(pEGLView);
    
    ....
     
    // 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);
 
    // create a scene. it's an autorelease object
    CCScene *pScene = HelloWorld::scene();
 
    // run
    pDirector->runWithScene(pScene);
 
    return true;
}

可以看到确实是通过CCDirector::sharedDirector()来实例化CCDirector的,那么来看看这个方法

CCDirector* CCDirector::sharedDirector(void)
{
    if (!s_SharedDirector)
    {
        s_SharedDirector = new CCDisplayLinkDirector();
        s_SharedDirector->init();
    }

    return s_SharedDirector;
}

这里本应该new一个CCDirector却new了一个CCDisplayLinkDirector,是怎么回事呢,来看看

class CCDisplayLinkDirector : public CCDirector
{
public:
    CCDisplayLinkDirector(void) 
        : m_bInvalid(false)
    {}

    virtual void mainLoop(void);
    virtual void setAnimationInterval(double dValue);
    virtual void startAnimation(void);
    virtual void stopAnimation();

protected:
    bool m_bInvalid;
};

可以看到CCDisplayLinkDirector是CCDirector的子类,CCDirector::sharedDirector()方法其实是一个向上转型的过程,所以我们用到的CCDirector其实是CCDisplayLinkDirector,对于CCDisplayLinkDirector官方是这样介绍她的:

CCDisplayLinkDirector是一个显示刷新频率的同步定时器导演

她的功能和局限性分别是:

是一个调度定时器,绘制并同步显示刷新频率

只支持1/60,1/30,1/15这三个时间间隔动画

来看看她具体做了什么

bool CCDirector::init(void)
{

   ...
   // create autorelease pool
    CCPoolManager::sharedPoolManager()->push();

}
这个CCPoolManager就是cocos2d-x中的垃圾回收管理器了,这里先不详细解释垃圾回收机制

这节主要讲了CCDirector常用功能及局限性,实例化内部机制,下节详细看看cocos2d-x垃圾回收原理


博客其他文章列表
http://my.oschina.net

原文链接:https://www.f2er.com/cocos2dx/340640.html

猜你在找的Cocos2d-x相关文章