【问题标题】:Javascript setTimeout blocked on Android Samsung S4Javascript setTimeout 在 Android 三星 S4 上被阻止
【发布时间】:2016-01-25 19:00:29
【问题描述】:

我正在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 在渲染完成之前无法完成。

关于为什么会阻塞的任何想法?

【问题讨论】:

    标签: javascript android html


    【解决方案1】:

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

    requestAnimationFrame 的详细信息在其他 StackOverflow 线程中,例如:How to use requestAnimationFrame?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多