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