环境设定
首先,在进入游戏之前,导演对象会设置游戏的运行环境:
-
设置显示游戏的视图,包含视图的投射,像素格式,等等。
-
设置游戏运行帧率。
-
为当前导演对象初始化计时器,动作管理器和事件管理器。
-
为当前导演对象初始化贴图缓存和渲染器。
-
导演对象的其他设置
执行主循环
主循环中每一次循环绘制一幅画面到屏幕上。下面是每一帧绘制的详细过程:
-
计算从上一帧开始到现在的时间,这将会被用于提供调试信息。
-
让导演对象中的计时器执行被计划的任务。
-
通过事件管理器通知cc.Director.EVENT_AFTER_UPDATE事件。
-
清空游戏屏幕。
-
如果需要进入下一个场景则进行场景切换。
-
遍历当前场景中的节点并更新节点的空间转换矩阵以及其他必要信息,然后发送绘制指令给渲染器。
-
通过事件管理器通知cc.Director.EVENT_AFTER_VISIT事件。
-
渲染器按顺序执行所有渲染指令来最终绘制整个场景到屏幕上。
-
通过事件管理器通知cc.Director.EVENT_AFTER_DRAW事件。
-
增加全局总帧数。
除此之外,cc.director同样提供一些函数来控制主循环:
暂停主循环:cc.director.pause()
恢复主循环:cc.director.resume()
场景管理
通常来说,一个游戏会包含用于不同用例的几个场景,程序应该通过cc.director的API来控制场景流。
|
1
2
3
4
5
6
7
8
9
10
|
// 让导演对象执行目标场景cc.director.runScene(scene); // 获取当前正在执行的脚本var scene = cc.director.getRunningScene(); // 将一个新场景推入场景栈中,并替换运行场景为这个新场景var scene = cc.director.pushScene(scene);// 将场景栈顶的场景推出场景栈,并替换运行场景为推出后栈顶的新场景cc.director.popScene();// 将场景栈中除了栈底的根场景以外的所有场景推出,并替换运行场景为根场景。cc.director.popToRootScene() |
除此之外,你可以通过cc.TransitionScene的效果类的转场特效来切换场景。
|
1
2
3
4
5
6
7
8
|
// 转场特效持续两秒var transitionTime = 2;// 创建下一个场景var nextScene = new cc.Scene();// 使用下一个场景创建转场特效场景var transitionScene = new cc.TransitionProgressInOut(transitionTime, nextScene);// 替换运行场景为转场特效场景cc.director.runScene(transitionScene); |
Cocos2d-JS引擎中还提供其他很多种预设转场特效
环境设置和属性
由于导演对象控制整个游戏运行环境,导演对象中还提供一些常用的设置和属性:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// 获取游戏主循环是否被暂停var paused = cc.director.isPaused();// 设置或获取动画帧间隔,这个设置会直接影响帧率var interval = cc.director.getAnimationInterval();cc.director.setAnimationInterval(value);// 设置或获取导演对象的内容放缩比例var scale = cc.director.getContentScaleFactor();cc.director.setContentScaleFactor(scaleFactor); // 设置或获取游戏世界可视窗口的原点和大小var origin = cc.director.getVisibleOrigin();var size = cc.director.getVisibleSize();// 获取游戏世界大小,winSize的大小通常等同于设计分辨率,而winSizeInPixel的大小是游戏世界的像素大小var winSize = cc.director.getWinSize();var winSizeInPixel = cc.director.getWinSizeInPixels();// 设置或获取调试信息是否被显示var isDisplaying = cc.director.isDisplayStats();cc.director.setDisplayStats(displayStats);// 设置或获取视图,它指向`cc.view`var view = cc.director.getOpenGLView();cc.director.setOpenGLView(openGLView);// 设置或获取WebGL/OpenGL的投影,// 可能的投影类型包括:cc.Director.PROJECTION_2D, cc.Director.PROJECTION_3D, cc.Director.PROJECTION_CUSTOMcc.director.getProjection();cc.director.setProjection(projection); |
导演对象系统事件
导演对象还有一些内建的系统事件:
cc.Director.EVENT_AFTER_DRAW:这个事件在每一帧图像的绘制完成之后被触发。
cc.Director.EVENT_AFTER_VISIT:这个事件在每一帧场景树遍历之后被触发。
cc.Director.EVENT_AFTER_UPDATE:这个事件在每一帧计时器任务执行完成之后被触发。
cc.Director.EVENT_PROJECTION_CHANGED:这个事件在导演对象的投影属性被修改之后触发。
源引:http://www.ipastimes.com/post/4.html
本文深入解析游戏开发中导演对象的作用,包括环境设定、主循环执行、场景管理以及关键属性和事件。重点阐述了如何通过导演对象控制游戏运行环境,实现场景切换与管理,以及提供了一系列API来方便开发者操作。
830

被折叠的 条评论
为什么被折叠?



