2017-09-25 76 views
0

链接1 - http://horebmultimedia.com/Sam3/ 链路2 - http://horebmultimedia.com/Sam5/Createjs:添加鼠标可容器slowsdown FPS

在上述链接,我已经增加了一组在不同的容器中加入各文件号的和u可以找到FPS上右上角。这个问题是当我在这个链接1中鼠标悬停并点击任何数字时,因为你看到FPS的速度变慢了,所以世界在左侧旋转得慢一些。在这个链接上,链接2,我只添加了一个鼠标和5个鼠标,但在FPS方面没有太大差别,为什么当我有37个容器时,它滞后很多。如果你需要解决,我可以给我的代码。

回答

2

我粗略看了一下你的代码,但是挖掘整个项目并不是调试优化问题的绝妙方法。

首先要考虑的是,如果你有你的舞台启用mouseOver,我会建议任何东西不互动宽松的使用mouseChildren=false互动元素,mouseEnabled=mouseChildren=false。翻转可能是一个很大的原因,因为它需要每秒钟绘制20次(在您的使用中)。文本和矢量的重绘可能很昂贵。

// Non-interactive elements (block all mouse interactions) 
element.mouseEnabled = element.mouseChildren = false; 

// Interactive elements (reduce mouse-checking children individually) 
element.mouseChildren = false; 

如果它们没有改变,你可能会考虑缓存文本元素或按钮图形。我认为我从源头上看到了一些缓存 - 但它通常是一件好事情要考虑。

-

随着中说,调试优化可能是艰难的。如果删除所有的按钮带来的性能提升,考虑你的按钮是如何被构建,以及它们的成本。 *鼠标悬停很贵 *矢量和文本可能很贵 *正确使用时,缓存可以提供帮助,但如果时间过于频繁,则缓存可能很昂贵。 *查看tick()上发生了什么。有时候,代码会不断运行,这并不需要。

-

其他一些注意事项:

  • 这不会做你认为:_oButton.off("mousedown"); - 你需要通过on()调用的结果。如果你只是清理,请致电_oButton.removeAllEventListeners()
  • 您不需要设置光标mouseover。光标只会在它翻转时才会改变 - 所以只需设置一次,然后摆脱你的东西。

  • 为自定义类扩展EventDispatcher可能很有意义,它可以为您提供诸如支持data参数的on()方法。我可能会推荐这个代替你的addEventListener东西CTextButton

  • 请注意,RAF不支持framerate属性(它只是使用浏览器的RAF速率,通常是60fps)。使用createjs.Ticker.timingMode而不是已弃用的useRAF

希望能有所帮助。

+0

谢谢Bro.Lanny。你回答的所有问题都帮助我改进得更好。我也使用循环访问容器。这是否太慢了帧速率。或者,我们称之为创建按钮的类更好。通过这种方式可以避免正确的循环。请给我们建议。 –