Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Samsung S4上的Javascript设置超时被阻止_Javascript_Android_Html - Fatal编程技术网

Android Samsung S4上的Javascript设置超时被阻止

Android Samsung S4上的Javascript设置超时被阻止,javascript,android,html,Javascript,Android,Html,我正在Android上学习html5游戏编程,编写一个太空入侵者克隆。使用javascript将游戏渲染到画布上 SetTimeout用于每隔15毫秒调用一个NewTurn函数。NewTurn函数计算移动并调用context.drawImage在屏幕上绘制玩家和入侵者 在我的Nexus7上,我没有问题。在三星S4上,用户触摸屏幕之前一切正常。发生这种情况时,加载NewTurn的SetTimeout将被阻止 这是我的密码: function NewTurn() { var timeStart =

我正在Android上学习html5游戏编程,编写一个太空入侵者克隆。使用javascript将游戏渲染到画布上

SetTimeout用于每隔15毫秒调用一个NewTurn函数。NewTurn函数计算移动并调用context.drawImage在屏幕上绘制玩家和入侵者

在我的Nexus7上,我没有问题。在三星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


你知道为什么会阻塞吗?

我仍然不知道为什么会阻塞SetTimeout。但是使用requestAnimationFrame而不是SetTimeout可以解决这个问题

有关requestAnimationFrame的详细信息,请参见其他StackOverflow线程,如下所示: