首页 > 代码库 > Cocos2dx-3.2 引擎学习(二)之Director
Cocos2dx-3.2 引擎学习(二)之Director
Director,导演类。
首先是在CCDirector.cpp文件中看到:
static DisplayLinkDirector *s_SharedDirector = nullptr;
确定了Director的单例模式设计原则。
DisplayLinkDirector,这个继承自Director。用来同步Timer,刷新屏幕
单例模式的设计精髓:
Director* Director::getInstance()
{
if (!s_SharedDirector) //当director实例不存的时候,创建之
{
s_SharedDirector = new (std::nothrow) DisplayLinkDirector();
CCASSERT(s_SharedDirector, "FATAL: Not enough memory");
s_SharedDirector->init();
}
return s_SharedDirector;
}
init()方法:
设置程序运行默认值,包括FPS,是否显示FPS,GL Projection,Pixel Format等。
场景指针的初始化nullptr。
四个重要的事件回调:
const char *Director::EVENT_PROJECTION_CHANGED = "director_projection_changed";
const char *Director::EVENT_AFTER_DRAW = "director_after_draw";
const char *Director::EVENT_AFTER_VISIT = "director_after_visit";
const char *Director::EVENT_AFTER_UPDATE = "director_after_update";
initTextureCache();
initMatrixStack(); //初始化场景栈,投影栈,纹理栈
// draw the scene
if (_runningScene)
{
_runningScene->visit(_renderer, Mat4::IDENTITY, false);
_eventDispatcher->dispatchEvent(_eventAfterVisit);
}
绘制场景,场景绘制完以后,分发事件_eventAfterVisit
if (_displayStats)
{
showStats();
} 游戏运行参数显示开关
_renderer->render();
_eventDispatcher->dispatchEvent(_eventAfterDraw);
render绘制以后,发出事件_eventAfterDraw。
// swap buffers
if (_openGLView)
{
_openGLView->swapBuffers();
}
交换绘制openGL缓存
场景的管理。
Cocos2dx-3.2 引擎学习(二)之Director