Flash遊戲的性能因素
- 遊戲性能中最關鍵的數據,但是在很長時間內被忽略。
- 幀率不穩定會使遊戲不流暢甚至出現卡頓現象。
- 影響幀率的因素:
- 渲染時間
- 每幀代碼執行時間
- 一直以來備受關注的數據,對幀率有直接影響。
- 影響CPU的因素:
- 大量元件
- 各類複雜的計算、處理
- 動畫等一切能引起重繪的內容
- 高內存容易引起頻繁GC,致使遊戲出現卡頓現象。
- 內存太高的因素:
- 代碼問題致使實例未釋放
- 資源管理不當,特別在使用了位圖後
Flash遊戲優化基本原則
- 使用性能監控工具找出最影響性能的部份並優化
儘可能構建與線上相同的測試環境
- 在優化後必定要再次使用監控工具檢查優化結果
- 二八原則,軟件運行的典型狀況:20%的程序佔用80%的執行時間,優化重點是這20%
如何優化Flash遊戲
Flash遊戲優化的主要工做是對內存、CPU、幀率不斷改進的過程,其中幀率最爲關鍵。算法
下面將分別對三個性能因素進行分析編程
優化Flash遊戲性能—內存
- 內存在性能上的影響不是很明顯,比較好控制但也容易出問題,保持良好的編程習慣是控制內存增加的有效方法。
- 低內存有助於CPU優化,常見作法是空間換時間
- 對象用完後必定要銷燬
- 刪除事件
- 清除引用
- 使用子域加載臨時資源
- 使用子域的前提是:保證全部不使用的對象被銷燬,不然只會拔苗助長致使內存更快增長
- 不要將不相關或生命週期不一樣的資源放入同一子域,任何一個對象不能銷燬,都會致使整個子域不能被釋放
- 實際上Flash已經提供最佳方案:下載時默認將每一個文件加載到一個獨立的子域,項目中由於嫌編碼麻煩被強制加載到主域
優化Flash遊戲性能—CPU
CPU使用狀況對遊戲性能有直接的影響,咱們一直在努力下降CPU的消耗,正因如此也進入了某些誤區。緩存
下面將對影響CPU的兩個主要因素作優化:性能優化
-
舞臺上元件數越多,CPU的消耗越高
- 不可見的元件一樣存在消耗
- 靜止的內容也會由於其餘元件的重繪產生消耗
-
重繪區域
- 疊加對象的重繪區域可以合成一個更大區域,這將致使更多不須要處理的內容發生重繪
- Flash最多同時支持3個重繪區域,超出時會被合併產生更大的重繪區域
-
明確美術製作規範並嚴格要求,儘可能避免美術元件中如下內容的出現
- 濾鏡、透明、顯示樣式、混合模式
- 過多的子元件、嵌套動畫
- 對元件進行縮放,比較常見的小圖大畫
- 補間動畫
- 遮罩
-
使用cacheAsBitmap
- 從策略上使用「緩存爲位圖」,將複雜圖形、文件本「緩存爲位圖」能有效的下降CPU消耗,提升遊戲性能
- 不要對動畫使用,當元件內容、大小發生改變時Flash須要從新生成內部位圖,反而增長CPU消耗
- cacheAsBitmap不會致使生成的swf文件增長,在性能上卻能帶來良好的提高,可以知足大部份性能要求,雖然比直接使用位圖資源要差一點。
-
使用位圖資源
- Flash的位圖渲染很是快,能大幅下降CPU消耗,提高遊戲性能
- 儘可能避免使用MovieClip,採用位圖替代
- 將動畫轉換爲一組位圖,經過不停的更換bitmapData實現動畫播放
-
問題:文件、內存增長工具
- 文件增長是不可避免的,在容許的狀況下采用更低品質能有效減少文件。
- 內存增長並不是絕對,並且不少內容只是臨時使用會很快被釋放,短期內的內存增長不會有明顯的性能影響。
- 某些狀況下美術提供的矢量圖資源生成的文件和位圖資源的相差不大,能夠優先採用位圖
-
CPU優化—複雜計算
由於動畫佔用的比重太大,算法優化對Flash的CPU影響很不明顯,但採用執行效率高的處理方式也很重要
性能
-
優化的誤區:低CPU就是高性能
常見表現:測試
CPU不高但幀率低或不穩定優化
緣由動畫
一、不合理的資源管理編碼
某些操做執行時間過長:構造大型元件、耗時的計算過程
二、渲染時間過長也會出現CPU低但幀率達不到要求
優化Flash遊戲性能—幀率
幀率的變化對遊戲體驗有着直接的影響
以每秒25幀爲例,平均第幀40ms,若是超出該時間會致使幀率不穩定或降低,進而引發遊戲不流暢甚至畫面卡頓。
-
如何控制幀時間
- 算法優化,儘可能減小執行時間
- 時間片
- 某些處理確實很費時也很耗CPU,能夠將這個處理分散成更小的過程,每幀執行一部份
- 控制每幀的處理量,使執行時間在40ms之內,剩下的在下一幀繼續處理
- 問題:代碼變得複雜
-
除了代碼執行時間還要考慮渲染時間,當舞臺上大量顯示元素時,渲染也很費時
- 優化渲染方式:使用位圖
- 新的內容
-
-
- 位塊傳輸(Blitting)
- 不被看好的Stage3D,但能夠用來作2D圖形加速
其餘:
- 文件的發佈參數對遊戲性能也有直接的影響
將播放器版本設置在10以上(使用FlashCS3製作的文件默認爲9) ,Flash10相對9有不少改進的地方:
-
- 位圖重用
- MovieClip跳幀機制
- 關閉調試、省略trace