如何允许 Easeljs 代码在用户切换选项卡时保持活动状态
How can I allow Easeljs Tickers to remain active when a user switches tabs
我正在使用Createjs制作游戏,一旦我切换标签,游戏就会自动暂停。我已经研究了这个主题,我相信已经发现不是Createjs暂停了股票代码,而是浏览器本身。这与页面可见性API有关,该API知道文档何时隐藏或可见,一旦隐藏,我相信它会减慢该文档的RAF或setIntervals,使其看起来像是暂停的。这为 CPU 和电池提供了帮助,使它们不会烧坏。
我需要我的游戏始终在后台运行,即使用户切换选项卡也是如此。我能做到这一点的最好方法是什么?只是想提一下,如果这很重要,我正在使用带有股票代码的 Easeljs。
如果我说的任何事情有误,请纠正我。我仍然是一个初学者,通过纠正我,我将能够理解真正的问题。谢谢你的时间。
你所描述的行为是意料之中的,浏览器会将 JavaScript 的执行限制在大约 1 FPS。
解决此问题的常用方法是确保您的应用程序/动画未绑定到特定的 FPS。例如,下面是形状在屏幕上移动的示例:http://jsfiddle.net/lannymcnie/4neobe00/2/
- 从左到右大约需要 5 秒
- 计数显示它重置的次数
如果只是在精灵中添加一定量(比如蓝色形状(,当浏览器框架关闭时,它每秒只会更新 1 次。我使用了 1.66,因为它与其他精灵的速度非常匹配。
lockedShape.x = (lockedShape.x + 1.66); // Moves a certain amount per tick
但是,Ticker 在 tick 事件中提供了一个delta
,当您具有可靠的帧速率时,该值约为 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 使用基于时间的补间,您可以在使用此方法的 EaselJS 中的影片剪辑和精灵上设置帧速率。
希望有帮助。
- 使用纯javascript而非jquery使所选选项卡处于活动状态并保持非活动状态
- 我如何为列出的选项卡元素编写一个Protractor测试,它会检查它是否's是否处于活动状态
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- 单击我网站中的链接时打开新选项卡,保持当前选项卡处于活动状态
- JQuery UI 1.11 将选项卡设置为活动状态
- 页面刷新后,所选选项卡处于非活动状态
- 使第二个选项卡处于第一个活动状态
- 使选项卡处于活动/非活动状态未显示正确的数据
- 当选项卡处于活动状态时,更改子(孙)类
- Angularjs :动态创建的选项卡不会处于活动状态/选中状态
- 在加载新页面时保持选项卡永久处于活动状态
- Boostrap和Angular:同时保持两个选项卡处于活动状态
- 画布的奇怪行为 上下文变量定义位置导致选项卡处于非活动状态时画布呈现冻结
- 将焦点设置在带有错误消息的第一个输入元素上,并将包含它的 TabStrip 选项卡设置为活动状态
- 检测浏览器选项卡是否处于活动状态或用户是否已切换
- 检查选项卡是否打开为活动状态
- 仅在选项卡处于活动状态时加载数据
- 仅在选项卡处于活动状态时运行内容脚本循环
- 仅当选项卡未处于活动状态时触发某些内容
- 如何在页面重新加载后使用 Twitter 引导程序保持当前选项卡处于活动状态