2017-09-25 73 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。你回答的所有問題都幫助我改進得更好。我也使用循環訪問容器。這是否太慢了幀速率。或者,我們稱之爲創建按鈕的類更好。通過這種方式可以避免正確的循環。請給我們建議。 –