我正在尝试制作一个基于时间和FPS的角色。
我需要的是让我的角色最后持续1秒。现在我正在使用下面的代码,它使角色跳跃1秒。但问题是..如果fps是60个字符移动60像素,并且如果fps是30,它只移动30个像素......我怎么能解决这个问题..
我需要角色移动60像素,无论fps和1秒内。
//Below is the requestanimation frame loop
// which runs the loop 60 to 30 times per second ,
// which vary according to browser.
function jumpcheck()
{
if(isjump)
{
ball.posy -=1; //make the character move 10 px based on fps..
window.timeoutHandle = window.setTimeout(function() {
isjump = false;
}, 1000);
}
}
}
注意:请求动画帧fps在20到60之间总是在变化。
代码如constantinous所说
var lastUpdate = Date.now();
function jumpcheck()
{
if(isjump)
{
speed = 1;
position = ball.posy;
var now = Date.now();
var dt = (now - lastUpdate) / 1000;
lastUpdate = now;
ball.posy = position + (speed * dt)
}
}
答案 0 :(得分:1)
对于游戏,通常将自上一帧以来的时间包括在计算中。对于delta时间,此时间通常称为dt
。要计算新位置,只需将传递的时间乘以当前速度即可获得新位置。在伪代码中,这看起来像这样:
speed = ...
position = ...
dt = ...
position = position + (speed * dt)