【发布时间】:2018-07-06 10:30:02
【问题描述】:
首先,我正在尝试使用 Three.js 和未来一些网络框架制作一个“简单”的 3D 游戏以使其成为多人游戏,因为我计划在未来做网络部分,所以我搜索了一下并发现大多数“动作”游戏使用基于“tick”的游戏循环来实现客户端和服务器的同步,然后在 tick 之间进行插值以使其流畅。
我已经有了一些刻度(处理输入、更新、绘制)函数的“工作”代码,我想知道我的实现是否正确,以及这个“确定性”循环应该如何工作,假设我的实现正在工作,当我增加“滴答率”时,游戏会变得更快(更新功能运行更多次),对吗?
this.loops = 0;
this.tick_rate = 20;
this.skip_ticks = 1000 / this.tick_rate;
this.max_frame_skip = 10;
this.next_game_tick = performance.now();
代码的第一部分在 Game 类的构造函数中
Game.prototype.run = function () {
this.handle_input();
this.loops = 0;
while (performance.now() > this.next_game_tick && this.loops < this.max_frame_skip){
this.up_stats.update();
this.update();
this.next_game_tick += this.skip_ticks;
this.loops++;
}
this.draw();
//monitor performance
this.stats.update();
//next update
requestAnimationFrame(this.run.bind(this));
};
完整代码在:https://github.com/derezzedex/first_three_js/blob/master/js/game/main.js
【问题讨论】:
标签: javascript three.js game-engine game-physics