Flash性能——游戲性能優化


Flash游戲的性能因素

 

  • 游戲性能因素之一:幀率

  1. 游戲性能中最關鍵的數據,可是在很長時間內被忽略。
  2. 幀率不穩定會使游戲不流暢甚至出現卡頓現象。
  3. 影響幀率的因素:
    1. 渲染時間
    2. 每幀代碼執行時間

 

  • 游戲性能因素之二:CPU

  1. 一直以來備受關注的數據,對幀率有直接影響。
  2. 影響CPU的因素:
    1. 大量元件
    2. 各種復雜的計算、處理
    3. 動畫等一切能引發重繪的內容

 

  • 游戲性能因素之三:內存

  1. 高內存容易引發頻繁GC,導致游戲出現卡頓現象。
  2. 內存過高的因素:
    1. 代碼問題導致實例未釋放
    2. 資源管理不當,特別在使用了位圖后

 

Flash游戲優化基本原則

  1. 使用性能監控工具找出最影響性能的部份並優化
    盡量構建與線上相同的測試環境
  2. 在優化后一定要再次使用監控工具檢查優化結果
  3. 二八原則,軟件運行的典型情況:20%的程序占用80%的執行時間,優化重點是這20%

 

如何優化Flash游戲

Flash游戲優化的主要工作是對內存、CPU、幀率不斷改進的過程,其中幀率最為關鍵。

下面將分別對三個性能因素進行分析

 

優化Flash游戲性能—內存

  1. 內存在性能上的影響不是很明顯,比較好控制但也容易出問題,保持良好的編程習慣是控制內存增長的有效方法。
  2. 低內存有助於CPU優化,常見做法是空間換時間
  • 降低內存的做法:

  1. 對象用完后一定要銷毀
    1. 刪除事件
    2. 清除引用
  2. 使用子域加載臨時資源
    1. 使用子域的前提是:保證所有不使用的對象被銷毀,否則只會適得其反導致內存更快增加
    2. 不要將不相關或生命周期不同的資源放入同一子域,任何一個對象不能銷毀,都會導致整個子域不能被釋放
    3. 實際上Flash已經提供最佳方案:下載時默認將每個文件加載到一個獨立的子域,項目中因為嫌編碼麻煩被強制加載到主域

優化Flash游戲性能—CPU

CPU使用情況對游戲性能有直接的影響,我們一直在努力降低CPU的消耗,正因如此也進入了某些誤區。

下面將對影響CPU的兩個主要因素做優化:

  • CPU優化—大量元件

  1. 舞台上元件數越多,CPU的消耗越高
    1. 不可見的元件同樣存在消耗
    2. 靜止的內容也會因為其他元件的重繪產生消耗
  2. 重繪區域
    1. 疊加對象的重繪區域能夠合成一個更大區域,這將導致更多不需要處理的內容發生重繪
    2. Flash最多同時支持3個重繪區域,超出時會被合並產生更大的重繪區域

 

  • CPU優化—動畫

  1. 明確美術制做規范並嚴格要求,盡量避免美術元件中以下內容的出現
    1. 濾鏡、透明、顯示樣式、混合模式
    2. 過多的子元件、嵌套動畫
    3. 對元件進行縮放,比較常見的小圖大畫
    4. 補間動畫
    5. 遮罩
  2. 使用cacheAsBitmap
    1. 從策略上使用“緩存為位圖”,將復雜圖形、文件本“緩存為位圖”能有效的降低CPU消耗,提高游戲性能
    2. 不要對動畫使用,當元件內容、大小發生改變時Flash需要重新生成內部位圖,反而增加CPU消耗
    3. cacheAsBitmap不會導致生成的swf文件增加,在性能上卻能帶來良好的提升,能夠滿足大部份性能要求,雖然比直接使用位圖資源要差一點。
  3. 使用位圖資源
    1. Flash的位圖渲染非常快,能大幅降低CPU消耗,提升游戲性能
    2. 盡量避免使用MovieClip,采用位圖替代
      1. 將動畫轉換為一組位圖,通過不停的更換bitmapData實現動畫播放
    3. 問題:文件、內存增加

      1. 文件增加是不可避免的,在允許的情況下采用更低品質能有效減小文件。
      2. 內存增加並非絕對,而且很多內容只是臨時使用會很快被釋放,短時間內的內存增加不會有明顯的性能影響。
      3. 某些情況下美術提供的矢量圖資源生成的文件和位圖資源的相差不大,可以優先采用位圖
  4. CPU優化—復雜計算

    因為動畫占用的比重太大,算法優化對Flash的CPU影響很不明顯,但采用執行效率高的處理方式也很重要

  5. 優化的誤區:低CPU就是高性能

    常見表現:

CPU不高但幀率低或不穩定

  原因

1、不合理的資源管理

某些操作執行時間過長:構造大型元件、耗時的計算過程

2、渲染時間過長也會出現CPU低但幀率達不到要求

 

優化Flash游戲性能—幀率

幀率的變化對游戲體驗有着直接的影響

以每秒25幀為例,平均第幀40ms,如果超出該時間會導致幀率不穩定或下降,進而引起游戲不流暢甚至畫面卡頓。

  1. 如何控制幀時間

    1. 算法優化,盡量減少執行時間
    2. 時間片
      1. 某些處理確實很費時也很耗CPU,可以將這個處理分散成更小的過程,每幀執行一部份
      2. 控制每幀的處理量,使執行時間在40ms以內,剩下的在下一幀繼續處理
      3. 問題:代碼變得復雜
  2. 除了代碼執行時間還要考慮渲染時間,當舞台上大量顯示元素時,渲染也很費時

    1. 優化渲染方式:使用位圖
    2. 新的內容
      1. 位塊傳輸(Blitting)
      2. 不被看好的Stage3D,但可以用來做2D圖形加速

 

其他:

  • 發布選項

  1. 文件的發布參數對游戲性能也有直接的影響

將播放器版本設置在10以上(使用FlashCS3制做的文件默認為9) ,Flash10相對9有很多改進的地方:

      1. 位圖重用
      2. MovieClip跳幀機制
    1. 關閉調試、省略trace


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM