游戏主循环
参考:游戏主循环,讲得非常清楚。
青瓷引擎调度器
青瓷引擎启动了个循环定时器来跑游戏主循环:
window.requestAnimationFrame(mainLoop);
游戏主循环的逻辑如下图所示:
这里我们需要先解释下两个概念:
场景(Scene)
1个场景就是一个游戏世界,或者说1个场景=1个关卡。一个场景包含了所有的游戏对象,例如角色、武器、例子系统、声音、敌人等等。在引擎编辑器中,所有的实体对象(或者说node节点)都完整的呈现在Hierarchy面板中:
更新场景
主循环会递归访问场景所有节点,伪代码如下:
foreach (nodes) {
node.update();
foreach (node’s components) {
component.update();
}
}
preUpdate
和postUpdate
的调度,与update
类似。下面举个实际例子来加深下理解。
调度例子
- 创建一个空的工程,名称为:MainLoop;
- 创建一个JavaScript脚本文件:Test.js,代码如下:
var Test = qc.defineBehaviour('qc.demo.Test', qc.Behaviour, function() {
console.log('Init');
}, {});
Test.prototype.preUpdate = function() {
console.log(this.gameObject.name, 'call preUpdate');
};
Test.prototype.update = function()</