Javascript 当用户切换选项卡时,如何允许Easeljs Tickers保持活动状态

Javascript 当用户切换选项卡时,如何允许Easeljs Tickers保持活动状态,javascript,html,canvas,createjs,requestanimationframe,Javascript,Html,Canvas,Createjs,Requestanimationframe,我正在使用Createjs制作一个游戏,当我切换标签时,游戏会自动暂停。我已经研究过这个话题,我相信我已经发现不是Createjs暂停了代码,而是浏览器本身。这与页面可见性API有关,该API知道文档何时隐藏或可见,一旦隐藏,我相信它会减慢该文档的RAF或SETInterval,使其看起来好像已暂停。这为CPU和电池提供了帮助,使它们不会耗尽 我需要我的游戏始终在后台运行,即使用户切换标签。我能做到这一点的最好方法是什么?我只想提一提,如果这有关系的话,我正在使用带有股票代码的Easeljs 如

我正在使用Createjs制作一个游戏,当我切换标签时,游戏会自动暂停。我已经研究过这个话题,我相信我已经发现不是Createjs暂停了代码,而是浏览器本身。这与页面可见性API有关,该API知道文档何时隐藏或可见,一旦隐藏,我相信它会减慢该文档的RAF或SETInterval,使其看起来好像已暂停。这为CPU和电池提供了帮助,使它们不会耗尽

我需要我的游戏始终在后台运行,即使用户切换标签。我能做到这一点的最好方法是什么?我只想提一提,如果这有关系的话,我正在使用带有股票代码的Easeljs


如果我说错了什么,请纠正我。我还是一个初学者,通过纠正我的错误,我将能够理解真正的问题。谢谢您的时间。

您所描述的行为是预期的,浏览器会将JavaScript执行速度限制在1fps左右

解决这个问题的通常方法是确保应用程序/动画没有绑定到特定的FPS。例如,以下是形状在屏幕上移动的示例:

  • 从左到右大约需要5秒钟
  • 计数显示其重置的次数
如果只向精灵添加一定量(例如蓝色形状),则在浏览器框架关闭时,精灵每秒仅更新1次。我使用了1.66,因为它与另一个精灵的速度非常接近

lockedShape.x = (lockedShape.x + 1.66); // Moves a certain amount per tick
但是,Ticker在tick事件中提供了一个增量,当您有可靠的帧速率时,该增量大约为1,但提供了一个乘数,您可以使用它来确定帧所需的时间。在示例中,索引的增量为
1 x event.delta

index += event.delta; 
然后根据索引确定位置:

shape.x = (index/10)%500; // divide by 10 to slow it down, modulus 500 to make it loop
我们甚至可以确定项目“循环”的次数,因为我们知道,如果将该索引除以宽度,它将给出循环的数量:

text.text = (index/10/500 |0).toString(); // rough position divided by 500, rounded.
因此,使用这种方法,您可以使其余内容以一致的速度运行,因为您知道自上次滴答声以来已过了多少时间。这是一个例子(它有一个做基本相同事情的样本,这可能是我在做自己的例子时脑子里想的)

请注意,TweenJS使用基于时间的Tween,您可以在使用此方法的EaselJS中设置MovieClips和Sprite的帧速率

希望有帮助