我正在学习Android上的html5游戏编程,写一个太空入侵者克隆。使用javascript将游戏渲染到画布。
SetTimeout用于每15毫秒调用一次NewTurn函数。 NewTurn函数计算运动并调用context.drawImage在屏幕上绘制玩家和入侵者。
在我的Nexus 7上,我没有任何问题。在三星S4上,一切都很好,直到用户触摸屏幕。发生这种情况时,将阻止加载NewTurn的SetTimeout。
这是我的代码:
function NewTurn()
{
var timeStart = getTime();
UpdateSpritePositions();
RenderSprites(); // Uses context.drawImage()
var timeEnd = getTime();
setTimeout(NewTurn, 15);
}
如果我将手指放在屏幕上无限拖动,那么在我抬起手指之前不会调用NewTurn。
timeEnd - timeStart经常在3毫秒左右。
timeStart - timeEnd因我是否以及如何触摸屏幕而变化很大。
我尝试删除所有的javascript onTouch处理程序,但这对我的问题没有影响。然后我尝试删除所有渲染,我的问题消失了。所以在我看来,触摸屏幕可能会阻止渲染,并且在渲染完成之前可能无法完成setTimeout。
关于为什么阻止它的任何想法?
答案 0 :(得分:1)
我仍然不知道SetTimeout被阻止的原因。但是使用requestAnimationFrame而不是SetTimeout可以解决它。
requestAnimationFrame的详细信息在其他StackOverflow线程中,例如:How to use requestAnimationFrame?