加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 16:46:56 所属栏目:百科 来源:网络整理
导读:以下内容基于cocos2d-x 2.2.5+Visual Studio2012,除特别注明外均为原创,如有纰漏,请m本人 -_- 上一节已经弄明白了HelloWorld运行过程,相信大家对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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读