所以我有游戏逻辑,在requestAnimationFrame的回调中呈现,不知怎么的,滴答运行得很奇怪。
事实上,渲染是正常的。但确切地说,滴答声似乎跳过了if
。
有问题的代码会将实体移动几个像素,直到移动一定数量的像素为止。
当选项卡没有被查看时,移动会发生,并被正确地呈现,但是当返回到选项卡时,我发现移动已经走到了很远的地方,为了使它更加可疑,实体返回到它的实际目标位置。
这感觉有点像用一种状态用勾选函数呈现帧,就像变量保持相同的值,而选项卡没有被查看,当再次查看选项卡时,所有的帧都被反向播放,直到运动真正停止。
有什么理由这样做,也许也有解决办法吗?
发布于 2017-04-27 03:04:45
事实上,这是requestAnimationFrame的“特性”之一,它将资源从没有重点的标签中解放出来。
要使用这种动画方法,您应该使用deltatime来跟踪帧之间经过的时间,以便使您的移动和计算适应这个跨度。
int last;
int now = Date.now();
int elapsed = 0;
function Draw() {
last = now;
now = Date.now();
elapsed = now - last;
my_player.moveX(speed * elapsed);
requestAnimationFrame(Draw);
}
Draw();
在这种情况下,如您所见,玩家将以每秒相同的距离移动,即使您在其他选项卡中,因为真正的计算将根据滴答之间的时间进行,而不是使用滴答的数量。
https://gamedev.stackexchange.com/questions/140405
复制相似问题