2011-05-19 41 views
0

我開發了一個跨平臺的AIR應用程序,嚴重地在移動設備上執行的動畫/使用矢量圖形而不是位圖資源。採用cacheAsBitmapMatrix/cacheAsBitmap會更好,何時何地分配得當,但仍不如使用位圖資產那麼快。我試圖在運行時將bitmapData.draw()矢量圖形轉換爲位圖對象,並改爲對位圖對象進行動畫處理,但是這隻能執行大約和(或者甚至完全相同)只是緩存矢量圖形作爲位圖。ActionScript - 在運行時光柵化矢量圖形?

Flash Professional 5.5 UI現在可以將矢量圖形轉換爲位圖資源,但是可以在運行時執行此操作嗎?是否有可能實際使用Rasterize()例程將編程繪製的矢量圖形,甚至可編輯的文本轉換爲運行時的位圖以獲得最佳的動畫性能,特別是在移動設備上?

回答

0

當你說你試圖對位圖進行動畫處理時,我希望你不是說你在旋轉/調整位圖的大小 - 因爲這是一個緩慢的過程。

也許有一個引擎,當你的遊戲加載時,根據MovieClip中的幀(如果有動畫)爲你創建一個精靈表。然後這些可以被BitmapData.copyPixels()引用。

這根本就:

  1. 創建一個BitmapData對象。
  2. 將每個幀的MovieClip時間線繪製到BitmapData上,就像手動使用精靈表一樣。
  3. 存儲BitmapData到爲方便以後的關聯數組,如sheets["zombie1"]

你甚至可以旋轉你的對象在for循環中,並繪製旋轉的物體在紙張上。

然後你的SheetObject只會加載一個先前定義的工作表的一部分,並顯示它的方法。

這一切都在正確的軌道上..?

+0

如果您將它們全部存儲在一個數組中,您實際上不需要將它們放入精靈表中。你可以從數組中訪問它們,例如動畫[「zombie_walk」] = zombieWalkFrames - 你的動畫幀數組。如果內容創建的方式通常只使用精靈表。如果它是矢量動畫片段作爲源代碼,最好只是堅持使用數組並以這種方式進行管理。 – prototypical 2011-05-20 00:13:33

+0

我沒有做任何框架腳本。它都是編程創建的矢量圖形(繪圖API)和Tweener for animation。是的,我正在旋轉和縮放圖形 - 例如,屏幕上有一個正方形。觸摸正方形會使其浮到舞臺上方,稍微放大並取代它的投影。我明白向矢量圖形添加濾鏡會自動將圖形緩存爲位圖。縮放/旋轉矢量圖形(無濾鏡)假定比縮放/旋轉位圖快?此外,我發佈到AIR 2.5並且還沒有試用AIR 2.6 – TheDarkIn1978 2011-05-20 00:55:58

+0

應用過濾器的多個對象可以四處移動,更改形狀,旋轉或真正做除靜態以外的任何操作都會對性能造成嚴重打擊 - 無論是什麼它們的類型(位圖/矢量)。 – Marty 2011-05-20 01:03:01