2009-08-09 53 views
1

我正在研究包含7-10層相當大(1500x800)位圖和動畫片段的視差動畫(類似於 - flordearagua.com)。爲了實現視差,我編寫了代碼以不同的速度移動所有圖層,這取決於鼠標位置和加速度等參數。所有這一切工作正常。在ActionScript 3中優化渲染

我想讓這個動畫真的更流暢。我想用這個達到最低24 FPS。目前我能夠通過我所做的所有優化實現僅15-17 FPS。

請注意。我正在使用的所有組件都是庫組件。我爲一些圖層啓用了位圖捕捉,但對於一些我卻不能。在執行視差移動時,啓用某些圖層的位圖捕捉會導致抖動。

請建議任何優化。

謝謝。

+0

爲什麼你能不能讓一些圖像的位圖緩存? – 2009-08-09 09:55:30

回答

0

拆分大的圖像分成較小的圖像,應該使Flash Player來進行測試,看看每個圖像是舞臺的視口區域內,並且它沒有被渲染。

所以分割圖像並把它們添加到的DisplayObjectContainer,所以將它們添加到雪碧。並用一組較小的圖像替換您的大圖像。你應該看到一些改進。

如果這不起作用,你可以嘗試手動執行可視性測試,使得不在視口中可見=虛假的圖像。

+0

感謝您回覆Brian。 但是,你不認爲拆分圖像需要大量處理移動它們並對齊它們嗎? 對於知名度,我已經用最快的CopyPixel API只所需的像素複製出更大的精靈/影片剪輯的,並顯示他們對單一影片剪輯。 – DexTer 2009-08-09 11:44:37

+0

我覺得分手的影像不會受到任何大量阻礙性能,但它的作用是(由您或手動例程)給閃光燈較小的顯示對象,因此它可以找出對自己什麼是對和關閉屏幕。我會小心使用CopyPixels例程,因爲速度是相對的。我會問的是:與什麼相比較快?與不復制像素相比,每次更新複製像素都是一項昂貴的操作。 – 2009-08-09 14:38:25

+0

嘿! 您上面添加了註釋以捕獲位圖。但實際上卻說我捕捉了一些圖層,但抓住所有圖層使得圖像有點生澀。 但現在,因爲我正在使用CopyPixel,它與我所瞭解的虛擬捕捉一樣好! 謝謝你的回答,非常感謝..保持張貼! – DexTer 2009-08-10 04:39:50

0

我認爲這是你應該做的 - 但我不能說這與你已經有多接近了。

  • 將所有較大的圖層保留在顯示列表中。
  • 在每一幀上,計算每層的哪一部分應該是可見的。
  • 抓取每個圖層當前可見部分的bitmapData對象。
  • 將它們按順序繪製到顯示列表上的空白顯示對象中。

但是,這聽起來像你已經這樣做了,或者至少,非常接近這樣做。你有任何阿爾法梯度,複雜的PNG,或者你可以簡化的類似?不透明總是比阿爾法快。

+0

嗨JMHNilbog! 感謝您的回覆。我正在做所有這些我的朋友。我沒有任何圖層在DisplayList上,我只需要通過CopyPixel()放置所需的像素,而且我在地圖中有很多alpha漸變。沒有阿爾法,我怎麼能正確地覆蓋7-10層在彼此之上!所以不是全部,而是其中一些都有阿爾法。 – DexTer 2009-08-10 04:36:06

+0

我正在考慮向量剪輯中的「空白空間」與alpha透明度的位圖不同。 – JMHNilbog 2009-08-10 12:12:44

1

我想你可以達到通過保持你可以關閉顯示列表中的一切有更好的表現。只留下一個愚蠢的精靈。手動計算鬆弛位移,然後僅合成一個位圖圖像,然後使用copyPixels將其繪製到屏幕上,速度非常快。

這變得更難,當你需要有(對某些層的某些區域點擊或翻車)細粒度的用戶交互來管理。仍然如此,您可以捕獲鼠標事件並掛鉤相同的代碼以確定點擊的內容和位置。

這裏的問題在於,您將以某種方式重新實現DisplayObject層次結構。這就是它的關鍵所在,原生顯示對象過於通用,對應用程序的細節知之甚少,因此您可以積極地進行優化。

你似乎是消息靈通的這一點,但就像任何其他的優化,其中是問題真的嗎? (簡介!)

虛擬機,這些天是相當不錯的,但渲染管線是非常緩慢。您可能會從其他來源獲得更多的FPS(內聯事物,記憶等)。

+0

嘿亞瑟! 謝謝。 只是告知,我實際上正在做所有這些。我在顯示列表中只有一個精靈,其中我只放置了其他位圖所需的像素。 分析是似乎真的好主意,但我不知道是否有優秀的分析器可AS3,請我沒有使用Flex的注意。我們有一個自定義構建分析器,我們使用並檢查分析數據。但一切似乎順利。在渲染過程中不需要花費太多時間。 所以仍然不知道如何實現我的目標... :) – DexTer 2009-08-10 04:33:00

+0

兩件事情要注意,即使這是一個常規的SWF應用程序(沒有彎曲),你仍然可以在主SWF加載到一個引導程序,並與彎曲輪廓它profiler ...但是... flex profiler沒有魔法鉤子。它使用了一個不太爲人所知的軟件包,但您需要進行配置的所有調用都在那裏(http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/sampler/package.html)。你的情況很值得分析。您已經採取了明確的步驟來確保性能,因此啓動問題不明顯的解決方案是一個不錯的主意。 乾杯 – 2009-08-10 14:42:50