我正在使用Createjs制作一个游戏,我有一个问题,游戏暂停自动一旦我切换标签。我已经研究过这个话题,我相信我已经发现,不是Createjs暂停了Tickers,而是浏览器本身。这与页面可见性API有关,该API知道文档何时隐藏或可见,一旦隐藏,我相信它会减慢文档的RAF或setinterval,使其看起来似乎已暂停。这为CPU和电池提供了帮助,因此它们不会烧坏。
我需要我的游戏始终在后台运行,即使用户切换标签。我能做的最好的方法是什么?我只想提一下,如果这很重要的话,我正在使用Easeljs和Tickers。
如果我说错了什么,请纠正我。我还是一个初学者,通过纠正我,我将能够理解真正的问题。谢谢你抽出时间。

最佳答案

您所描述的行为是预期的,浏览器将把JavaScript的执行速度限制到大约1fps。
解决这个问题的通常方法是确保应用程序/动画不绑定到特定的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.

因此,使用这种方法,您可以使内容的其余部分以一致的速度运行,因为您知道自最后一个滴答声以来经过了多少时间。这里有一个official tutorial(它有一个做基本相同事情的样本,这可能是我自己做例子时脑子里想的)。
请注意,TweenJS使用基于时间的tween,您可以在EaselJS中的MovieClips和Sprites上设置帧速率,它使用这种方法。
希望能有所帮助。

关于javascript - 当用户切换标签时,如何允许Easeljs代码运行器保持事件状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35244573/

10-10 21:57