当前位置: 代码迷 >> 综合 >> cocos2dx : 导演类中的常见用法.
  详细解决方案

cocos2dx : 导演类中的常见用法.

热度:105   发布时间:2023-10-30 19:56:31.0

在cocos2dx中,导演作为一个顶级的存在,所以他被赋予了很多的功能,也因此被封装了很多的函数方法,同时,还有一些杂七杂八的用法也被封装在了导演类中.

//大家都知道,导演通常只有一个,副导演很多,所以在cocos2dx中也如此,导演是被设计成单例模式的.这个获取实例的方法是需要反复调用的.
1.static Director* getInstance();

//右键查看定义,看看他获取实例的源码,
//s_SharedDirector被定义为导演的静态对象指针.
static Director *s_SharedDirector = nullptr;Director* Director::getInstance()
{//判断导演指针是否有指向.if (!s_SharedDirector){//没有指向,则让他指向导演类的对象.s_SharedDirector = new (std::nothrow) Director;//判断是否分配成功内存.CCASSERT(s_SharedDirector, "FATAL: Not enough memory");//然后对导演实例进行初始化,这个初始化通常是把导演类中的一些成员变量以及一些标识符给归零.也就是回到原来的状态.s_SharedDirector->init();}//返回导演实例的对象.return s_SharedDirector;
}

2.void setDisplayStats(bool); //设置是否显示FPS,节点的数量等属性运行状态.如下图所示.60代表帧率,3代表节点数.
这里写图片描述

3.void setAnimationInterval(1.0f / 60); //设置帧率,通过研究发现人眼在每秒60帧的情况下是最好的.

4.Vec2 getWinSize(); //获取屏幕的尺寸.

5.Vec2 getVisibleSize(); //获取可见区域的尺寸.

6.Vec2 getVisibleOrigion(); //获取可见区域的起始坐标.为矩形左下角顶点的坐标.

7.TextCache* getTextureCache(); //获得指向纹理缓冲区的指针.

//下面是两个坐标系的转化方法,由于UI坐标系是以左上角为原点的,OpenGL坐标系是以左下角为原点的,所以才有了这样的转换函数放在了导演中.
8.Vec2 convertToGL(const Vec2 &point); //把ui坐标转化为OpenGL坐标.

9.Vec2 convertToUI(const Vec2 &point); //把OpenGL坐标转化为ui坐标.

导演可以对场景的切换进行操作,场景切换时,了解场景的生命周期是十分重要的,在之后的博客会写关于场景的生命周期.
10.void runWithScene(Scene *scene); //开始执行第一个场景.

11.void replaceScene(Scene *scene); //替换场景,之前的场景被释放,新的场景被播放,释放和播放过程是掺杂着进行的.

12.void pushScene(Scene *scene); //加入场景.

void Director::pushScene(Scene *scene)
{//右键查看定义发现:导演中有一个叫做场景调度器的容器.会把新的场景添加进来.Vector<Scene*> _scenesStack;CCASSERT(scene, "the scene should not null");_sendCleanupToScene = false;#if CC_ENABLE_GC_FOR_NATIVE_OBJECTSauto sEngine = ScriptEngineManager::getInstance()->getScriptEngine();if (sEngine){sEngine->retainScriptObject(this, scene);}
#endif // CC_ENABLE_GC_FOR_NATIVE_OBJECTS_scenesStack.pushBack(scene);_nextScene = scene;
}

13.void popScene(); //退出并释放当前场景,返回上一个场景.这里要注意:是先释放当前场景的内存,然后在返回上一个场景,这个方法一般是和pushScene()连用的.

//导演还有着控制游戏流程的方法.最常见的当然是暂停游戏,继续游戏,退出游戏啦.
14.void pause(); //暂停游戏.

15.void resume(); //继续游戏.

16.void end(); //结束游戏.

17.EventDispatcher* getEventDispatcher(); //获取事件分发器的指针.

18.GLView* getOpenGLView(); //获取OpenGLView的指针.

19.void setOpenGLView(GLView*); //设置OpenGLView.

20.void drawScene(); //绘制场景