环境设定

首先,在进入游戏之前,导演对象会设置游戏的运行环境:

  1. 设置显示游戏的视图,包含视图的投射,像素格式,等等。

  2. 设置游戏运行帧率。

  3. 为当前导演对象初始化计时器,动作管理器和事件管理器。

  4. 为当前导演对象初始化贴图缓存和渲染器。

  5. 导演对象的其他设置

执行主循环

主循环中每一次循环绘制一幅画面到屏幕上。下面是每一帧绘制的详细过程:

  1. 计算从上一帧开始到现在的时间,这将会被用于提供调试信息。

  2. 让导演对象中的计时器执行被计划的任务。

  3. 通过事件管理器通知cc.Director.EVENT_AFTER_UPDATE事件。

  4. 清空游戏屏幕。

  5. 如果需要进入下一个场景则进行场景切换。

  6. 遍历当前场景中的节点并更新节点的空间转换矩阵以及其他必要信息,然后发送绘制指令给渲染器。

  7. 通过事件管理器通知cc.Director.EVENT_AFTER_VISIT事件。

  8. 渲染器按顺序执行所有渲染指令来最终绘制整个场景到屏幕上。

  9. 通过事件管理器通知cc.Director.EVENT_AFTER_DRAW事件。

  10. 增加全局总帧数。

除此之外,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();
//将一个新场景推入场景栈中,并替换运行场景为这个新场景
scene=cc.director.pushScene(scene);
//将场景栈顶的场景推出场景栈,并替换运行场景为推出后栈顶的新场景
cc.director.popScene();
//将场景栈中除了栈底的根场景以外的所有场景推出,并替换运行场景为根场景。
cc.director.popToRootScene()

除此之外,你可以通过cc.TransitionScene的效果类的转场特效来切换场景。

1
2
3
4
5
6
7
8
//转场特效持续两秒
transitionTime=2;
//创建下一个场景
nextScene= new cc.Scene();
//使用下一个场景创建转场特效场景
transitionScene= cc.TransitionProgressInOut(transitionTime,nextScene);
//替换运行场景为转场特效场景
cc.director.runScene(transitionScene);