首页 > 代码库 > 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