我正在开发一个基于 Javascript 的多人游戏。到目前为止,我已经准备好基本的服务器、客户端和网络。
我确实遇到了一个问题,即我的播放器在 120Hz 屏幕上比在 60Hz 屏幕上移动得更快。我通过将玩家的移动速度乘以“requestAnimationFrame”的增量时间来解决这个问题。
然而; 将动画与逻辑分开会是更好的解决方案吗?
如:
//Game loop; Do each 1/60th of a second
setInterval(gameTick, 1000/60);
function gameTick(){
player.handleKeys();
enemies.foreach( (enemy) => {
enemy.update();
});
}
//Draw loop; match to player screen refresh rate
window.requestAnimationFrame(gameLoop);
function gameLoop() {
player.draw();
enemies.foreach( (enemy) => {
enemy.draw();
});
window.requestAnimationFrame(gameLoop);
}
虽然差异可能是“可以忽略的”,但我想避免使用 240Hz 的玩家向服务器“发送垃圾邮件”,并且比其他玩家更有优势。
另一方面,对于 240Hz 显示器;您的键盘输入仅会处理 4 帧中的 1 帧,所以感觉可能不那么流畅?
我要问的这个原因是这将是一场竞争性的游戏,因此应该保持平衡。但是我已经检查了各种来源,共识似乎是使用 requestAnimationFrame (即使是逻辑;不仅仅是绘图),尽管我对此表示怀疑并想知道哪个是正确的(和/或用于专业竞技游戏)。