cocos2d-x除了提供CCDirector外,还提供了CCDisplayLinkDirector。CCDisplayLinkDirector是一个可以自动刷新的CCDirector。CCDisplayLinkDirector继承自CCDirector,CCDirector继承自CCObject。
CCDirector类的主要函数解释如下(cocos2d-x 2.0版):
CCScene* getRunningScene(void); /** 获取当前运行的场景。CCDirector每次仅能运行一个场景*/
double getAnimationInterval(void); /** 获取FPS值(每秒帧刷新率) */
virtual void setAnimationInterval(double dValue) = 0; /** 设置FPS值 */
bool isDisplayStats(void); /** 获取是否在屏幕底部显示FPS*/
void setDisplayStats(bool bDisplayStats); /** 设置是否在屏幕底部显示FPS */
float getSecondsPerFrame(); /** 获取每渲染一帧用的时间,单位秒 */
CCEGLView* getOpenGLView(void); /** 获取CCEGLView对象,用于渲染游戏 */
void setOpenGLView(CCEGLView *pobOpenGLView); /** 设置CCEGLView对象*/
bool isNextDeltaTimeZero(void); /** 获取下次增量时间是否为零? */
void setNextDeltaTimeZero(bool bNextDeltaTimeZero); /** 设置下次增量时间是否为零 */
bool isPaused(void); /** 是否暂停状态*/
unsigned int getTotalFrames(void); /** 从CCDirector启动以来一共渲染了多少帧*/
ccDirectorProjection getProjection(void); /** 获取OpenGL的Projection*/
void setProjection(ccDirectorProjection kProjection); /** 设置OpenGL的Projection*/
bool isSendCleanupToScene(void); /** 场景被替换时是否会接收到cleanup消息。若新场景是被push进来的,旧场景不会收到cleanup消息;若新场景是被替换进来的,旧场景将收到cleanup消息*/
CCNode* getNotificationNode(); /** 在主场景被visit之后将被访问的对象,这个对象必须可以执行visit selector。经常用来挂载notification对象,如CCNotifications */
void setNotificationNode(CCNode *node); /** 设置在主场景被visit之后将被访问的对象*/
bool enableRetinaDisplay(bool bEnabelRetina); /** 是否使用高清显示模式*/
CCSize getWinSize(void); /** 返回OpenGL view的大小,单位为点*/
CCSize getWinSizeInPixels(void); /** 返回OpenGL view的大小,单位为像素*/
CCSize getVisibleSize(); /** 返回OpenGL view可见区域的大小,单位为点。如果没有调用CCEGLView::setDesignResolutionSize()
方法,那结果将等同于getWinSize方法*/
CCPoint getVisibleOrigin(); /** 返回OpenGL view可见区域的原点,单位为点*/
void reshapeProjection(const CCSize& newWindowSize); /**改变projection的大小 */
CCPoint convertToGL(const CCPoint& obPoint); /** 将UIKit坐标转换为OpenGL坐标*/
CCPoint convertToUI(const CCPoint& obPoint); /** 将OpenGL坐标转换为UIKit坐标*/
float getZEye(void); /** ?*/
void runWithScene(CCScene *pScene); /** 指定进入Director的主循环运行的场景。ps:仅在运行第一个场景时调用,如果已经存在运行中的场景,不能调用本方法。本方法调用后将调用pushScene方法,然后调用startAnimation*/
void pushScene(CCScene *pScene); /** 将运行中的场景暂停,并push到场景堆栈中,新的场景将被执行。仅当已存在一个运行中的场景时本方法可被调用*/
void popScene(void); /** 从场景堆栈中pop出一个场景,此场景将替换现在正运行的场景,而运行中的场景将被删除。如果场景堆栈中没有可pop的场景,执行将终止。仅当已存在一个运行中的场景时本方法可被调用*/
void popToRootScene(void); /** 从场景堆栈中pop出除根场景外的所有场景,pop出的场景将替换现在正运行的场景,而运行中的场景将被删除。如果场景堆栈中没有可pop的场景,执行将终止。仅当已存在一个运行中的场景时本方法可被调用*/
void replaceScene(CCScene *pScene); /** 使用新场景替换当前场景,当前场景将终止,仅在存在当前场景时可调用*/
void end(void); /** 终止执行,释放运行中的场景,需要手动移除OpenGL view*/
void pause(void); /** 暂停运行中的场景。场景仍然被渲染,当所有定时器将被暂停,同时为了减少CPU消耗,暂停时FPS将降至每秒4帧*/
void resume(void); /** 恢复被暂停的场景,定时器被重新激活,delta time将为0(好像游戏未被暂停一般)*/
void stopAnimation(void) = 0; /** 停止动画。将停止渲染,主循环停止。如不想停止动画渲染,使用pause方法*/
void startAnimation(void) = 0; /** 主循环再次被触发,在调用stopAnimation后才能调用此方法。初次启动主循环不能使用本方法,而是应调用runWithScene方法*/
void drawScene(void); /** 绘制场景,每帧都会调用此方法。不要手动调用此方法*/
void purgeCachedData(void); /** 删除缓存数据。包括CCTextureCache、CCSpriteFrameCache、CCLabelBMFont缓存数据*/
void setGLDefaultValues(void); /** 设置OpenGL的默认值*/
void setAlphaBlending(bool bOn); /** 设置是否启用OpenGL的alpha通道*/
void setDepthTest(bool bOn); /** 设置是否测试OpenGL景深*/
void mainLoop(void) = 0;
void setContentScaleFactor(float scaleFactor); /** 设置surface的大小,单位为像素。可能和屏幕大小不一样。如High-res设备可能surface大小大于屏幕大小。仅在使用4.0以上SDK编译时有效。*/
float getContentScaleFactor(void); /** 获取surface的大小,单位为像素*/
static CCDirector* sharedDirector(void); /** 类静态方法,获取全局唯一的CCDirector对象,如不存在则创建并获取对象*/