2009-11-11 100 views
0

我發佈了這個到Adobe論壇,但我不期望在那裏有一個好的答案。我正在尋找某人在Flash中完成遊戲並遇到同樣問題的幫助。Internet Explorer閃存性能

步驟來重現我的問題:

  1. 在Flash中創建簡單點的DisplayObject

    dot.graphics.beginFill(color); 
    dot.graphics.drawCircle(0, 0, 2); 
    dot.graphics.endFill(); 
    
  2. 畫點爲位圖多次框架結合

    bitmapData.draw(dot, null, null, "normal", null, _smoothing); 
    
  3. 測試傳幀率瀏覽器,Win32上的Flash插件版本

期待:

幀率在大多數情況下

密切觀察:

我使用Flash10b.ocx看到IE7下的幀率下降25%(10.0.22)和50使用Flash10c.ocx(10.0.32)降低幀率。 FireFox,Safari和Mac OSX下的PLugins不會出現相同的減速。

請幫助:

我想獲得一個性能問題,我在Internet Explorer中看到求助/確認。 Adobe和Flash社區在互聯網上很棒,但我很驚訝地發現沒有關於這方面的信息,只有一些關於10.0.32和10.0.22上的電影播放的報道。

我的猜測是,在IE瀏覽器插件傳遞繪圖調用Win32,這是緩慢的。

我的解決辦法是:

不是每次都借鑑採用抽籤的位圖,緩存平局調用位圖和使用CopyPixels。當我這樣做時,各瀏覽器的性能是相同的,在10%以內。

bitmapData.copyPixels(dot.bitmapData,dot.bitmapData.rect,new Point(dot.x,dot.y),null,null,true); 

環路我使用:

function enterFrame(e:Event) { 
    bitmap.lock(); 

    for (var i:int=0;i<particles.length;i++) { 
     draw(particle[i]); 
    } 

    bitmap.unlock(); 
} 

說明有關其他可能的「已知」的問題,我想更多地瞭解:

  • 在IE瀏覽器的內存使用我的應用程序是據報道要小得多(在Flash Player中爲33MB,在IE下爲16MB)。
  • 在IE下,內存頁錯誤超過10k /秒,而在Flash播放器中則沒有。
  • 在IE下,stage.invalidate似乎會導致性能問題。
  • 在IE下,在位圖上放置一個模糊濾鏡會在Flash播放器中具有更大的性能。

回答

0

不同平臺/瀏覽器/次要版本/調試器/等Flash插件性能(瘋狂)不同。除了編碼目標受衆的最小公分母之外,您可以做的很少,以抵消這些差異。

也就是說,bitmapData.draw速度很慢,因爲它會強制每次調用時重新掃描矢量數據。在引擎蓋下,Flash也使用這種方法,但它跟蹤屏幕的髒區域,因此它比你調用的時間要少(在調試器中打開「顯示重繪區域」以便可視化地看到)。

您的bitmapData.copyPixels解決方案適用於手動光柵實現。這幾乎是在Flash中獲得高性能複雜動畫的唯一機制。

0

感謝您的確認。我認爲鎖的目的是爲了幫助閃存最大限度地減少重繪。即使Flash應用程序以接近60 fps的速度運行,我也看到了口吃。

而不是人們想知道我是否編碼正確。我將一些全新的Tweenlite性能示例代碼修改爲150像素/秒左右的線性運動。這突出了人們看到的口吃。示例在http://forums.greensock.com/viewtopic.php?f=1&t=1857

+0

啊,這是着名的Flash「剪切」缺陷,自從它首次發佈以來一直存在於該播放器中。沒有解決方案或解決方法。 – 2009-11-13 11:07:49