您的位置:首页 > 移动开发 > Cocos引擎

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

2015-12-04 01:53 369 查看
以下内容基于cocos2d-x 2.2.5+Visual Studio 2012,除特别注明外均为原创,如有纰漏,请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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: