2013-04-10 123 views
0

我一直在玩easeljs,我發現表演開始下降。在我的例子中,Chrome需要大約3秒才能到達這一點,而Safari需要25秒,Firefox已經遍佈全球。Easeljs性能下降?

問題:

  1. 我做錯了什麼
  2. 或者這是我應該從easeljs期待的表現嗎?

爲了證明對性能的影響,我遇到了,我創建了一個簡單的圓形重繪在環路上的動畫,但幀率很快開始下降。如果我恢復到純粹的畫布API調用,那麼它會重新獲得性能。

下面是我的重繪的關鍵片段,選擇的方法繪製圓:

if (counter.fps > 60) { 
    circle.graphics.beginFill('green') 
    circle.graphics.drawCircle(0,0, w/10) 
    circle.graphics.endFill(); 
    stage.update(); 
} else {  
    context.beginPath(); 
    context.arc(circle.x, circle.y, w/10, 0, 2 * Math.PI, false); 
    context.fillStyle = "darkred"; 
    context.fill(); 
} 

的演示中看到這樣的jsfiddle: http://jsfiddle.net/AshCoolman/5xYxM/9/

變化我有類似的結果嘗試:

  • requestAnimationFrame(and a pollyfill)
  • 較慢FPS

(粗糙)(上mid2012的MacBook Air OSX 10.8.2)的性能時間軸

鉻v26.0.1410.43

  • 0-3s = 90fps
  • 3s = fps開始下降
  • 6s = fps命中60fps

Safari v6.0.2(8536.26。17)

  • 0-20s =達到90fps
  • 20S = FPS開始下降
  • 35S = FPS打60fps的

火狐V20

  • fsFiddle主辦:完全不穩定
  • lo凱莉主持:就像鉻合金的性能,但更不穩定

回答

11

EaselJS圖形被保留,所以每一幀要添加另一個圓定義Graphics隊列。所以,經過1000次「重繪」調用後,每次都會繪製1000圈。

使用Graphics.clear()來重置繪製隊列,或者只是畫一圈&移動相應的Shape(推薦)。

這是你的小提琴,也得到了堅實的99fps我的修改版本: http://jsfiddle.net/5xYxM/13/

+0

+1 OP的毛刺的福氣。順便說一句,你實際上是否與CreateJS相關聯。如果是這樣,我喜歡你的代碼,很高興認識你! – markE 2013-04-10 17:41:08

+1

謝謝!很高興認識你@markE。我是圖書館的創始人(格蘭特斯金納) - 很高興你喜歡他們。 – gskinner 2013-04-10 17:44:08

+0

這工作得很好,謝謝jsfiddle – 2013-04-12 14:19:02