我的游戏角色的速度为什么在不同的计算机上有什么不同?(Why speed of my game ch

2019-09-01 03:33发布

我正在开发使用Java脚本的在线游戏。 我使用的setInterval(movimage,10)的方法来移动游戏角色。 但我已经看到了游戏角色的移动速度不相同的是所有的计算机。 请给我建议。

Answer 1:

取而代之的setInterval的,你应该使用requestAnimationFrame( https://developer.mozilla.org/en-US/docs/DOM/window.requestAnimationFrame )。

没有一点要更新更快的东西比屏幕可以借鉴。 你的目标是为60fps的,这是每帧16毫秒左右。

http://paulirish.com/2011/requestanimationframe-for-smart-animating/在如何做到这一点一些更多的信息。

浏览器支持是非常好的( http://caniuse.com/#feat=requestanimationframe )总之,所有当前浏览器除了Android的股票浏览器。

如果你必须在IE9这个工作,下, https://gist.github.com/paulirish/1579671做模拟在这些浏览器的行为的一份体面的工作。 (不过说实话,我怀疑这将是最后一次您的后顾之忧,特别是在考虑到缺乏canvas ...)



Answer 2:

即使脚本几乎没做什么它需要更长的时间超过10微秒为每个区间:

function interval(){
 var i=0
 intervalID= setInterval(function(){
   console.log("called",new Date().getTime());
   i++;
   if(i>=10){
     clearInterval(intervalID);
   }
 },10);

}
interval()

你开始注意到一个差异,当一台计算机是慢或浏览器速度较慢。



Answer 3:

如果你是一个游戏,下面gameloop最小化,这与在不同计算机上的不同速度运行的问题:

var loopTime = 33; // 1000ms / 30fps (what we want) = 33ms per loop
var startTime, endTime, executionTime;

function gameLoop(){

    startTime = new Date().getTime();
    doGameMechanics();
    drawGame();
    endTime = new Date().getTime();
    executionTime = endTime - startTime;

    if(executionTime < loopTime) { // we were faster than maximum allowed
        // sleep the remaining time so the game does not go too fast
        setTimeout(function(){ gameLoop(); }, loopTime - executionTime);
    }else{ // we were slower than maximum allowed
        setTimeout(function(){ gameLoop(); }, 0);
    }
}

你要记住,你的游戏逻辑doGameMechanics()和绘图drawGame()需要一定的时间,太。 这可能会导致在不同的计算机速度较慢,更快的游戏行为。

在这个gameloop,我们要检查他们执行的速度有多快。 测量时间之后,我们知道我们必须要等待多久(使用setTimeout )。 如果我们“太慢”,我们所说setTimeout 0毫秒作为第二个参数。 这是必要的,以便其他线程(如用户输入)得到执行,因为JavaScript是单线程的。



文章来源: Why speed of my game character is different in different computers?