cocos2d-x引擎基础使用--导演类

时间:2021-07-13 04:56:02
  导演在cocos2d-x引擎里面对应的类为CCDirector。在整个游戏中一般只有一个导演。在游戏开始时,初始化CCDirector,游戏结束时,销毁它。CCDirector提供了管理场景的方法,如runWithScene、drawScene、pushScene和replaceScene等,通过这些API可以实现在各个场景之间切换,CCDirector也可以设置或者获取一些系统信息,如调整OpenGL的相关设置,获取屏幕的大小等。

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对象,如不存在则创建并获取对象*/

阅读(1145) |  评论(0)