Javascript 当用户切换选项卡时,如何允许Easeljs Tickers保持活动状态
我正在使用Createjs制作一个游戏,当我切换标签时,游戏会自动暂停。我已经研究过这个话题,我相信我已经发现不是Createjs暂停了代码,而是浏览器本身。这与页面可见性API有关,该API知道文档何时隐藏或可见,一旦隐藏,我相信它会减慢该文档的RAF或SETInterval,使其看起来好像已暂停。这为CPU和电池提供了帮助,使它们不会耗尽 我需要我的游戏始终在后台运行,即使用户切换标签。我能做到这一点的最好方法是什么?我只想提一提,如果这有关系的话,我正在使用带有股票代码的EaseljsJavascript 当用户切换选项卡时,如何允许Easeljs Tickers保持活动状态,javascript,html,canvas,createjs,requestanimationframe,Javascript,Html,Canvas,Createjs,Requestanimationframe,我正在使用Createjs制作一个游戏,当我切换标签时,游戏会自动暂停。我已经研究过这个话题,我相信我已经发现不是Createjs暂停了代码,而是浏览器本身。这与页面可见性API有关,该API知道文档何时隐藏或可见,一旦隐藏,我相信它会减慢该文档的RAF或SETInterval,使其看起来好像已暂停。这为CPU和电池提供了帮助,使它们不会耗尽 我需要我的游戏始终在后台运行,即使用户切换标签。我能做到这一点的最好方法是什么?我只想提一提,如果这有关系的话,我正在使用带有股票代码的Easeljs 如
如果我说错了什么,请纠正我。我还是一个初学者,通过纠正我的错误,我将能够理解真正的问题。谢谢您的时间。您所描述的行为是预期的,浏览器会将JavaScript执行速度限制在1fps左右 解决这个问题的通常方法是确保应用程序/动画没有绑定到特定的FPS。例如,以下是形状在屏幕上移动的示例:
- 从左到右大约需要5秒钟
- 计数显示其重置的次数
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的帧速率
希望有帮助