剑jian 发表于 2017-7-7 17:11:33

性能!性能!还是性能!FLASH的游戏的性能优化

游戏性能因素之一:帧率

游戏性能中最关键的数据,可是在很长时间内被忽略。
帧率不稳定会使游戏不流畅甚至出现卡顿现象。
影响帧率的因素:
渲染时间
每帧代码执行时间


游戏性能因素之二:CPU

一直以来备受关注的数据,对帧率有直接影响。
影响CPU的因素:
大量元件
各种复杂的计算、处理
动画等一切能引发重绘的内容


游戏性能因素之三:内存

高内存容易引发频繁GC,导致游戏出现卡顿现象。
内存过高的因素:
代码问题导致实例未释放
资源管理不当,特别在使用了位图后


Flash游戏优化基本原则

使用性能监控工具找出最影响性能的部份并优化
尽量构建与线上相同的测试环境
在优化后一定要再次使用监控工具检查优化结果
二八原则,软件运行的典型情况:20%的程序占用80%的执行时间,优化重点是这20%


如何优化Flash游戏

Flash游戏优化的主要工作是对内存、CPU、帧率不断改进的过程,其中帧率最为关键。

下面将分别对三个性能因素进行分析



优化Flash游戏性能—内存

内存在性能上的影响不是很明显,比较好控制但也容易出问题,保持良好的编程习惯是控制内存增长的有效方法。
低内存有助于CPU优化,常见做法是空间换时间
降低内存的做法:

对象用完后一定要销毁
删除事件
清除引用
使用子域加载临时资源
使用子域的前提是:保证所有不使用的对象被销毁,否则只会适得其反导致内存更快增加
不要将不相关或生命周期不同的资源放入同一子域,任何一个对象不能销毁,都会导致整个子域不能被释放
实际上Flash已经提供最佳方案:下载时默认将每个文件加载到一个独立的子域,项目中因为嫌编码麻烦被强制加载到主域
优化Flash游戏性能—CPU

CPU使用情况对游戏性能有直接的影响,我们一直在努力降低CPU的消耗,正因如此也进入了某些误区。

下面将对影响CPU的两个主要因素做优化:

CPU优化—大量元件

舞台上元件数越多,CPU的消耗越高

不可见的元件同样存在消耗
静止的内容也会因为其他元件的重绘产生消耗
重绘区域

叠加对象的重绘区域能够合成一个更大区域,这将导致更多不需要处理的内容发生重绘
Flash最多同时支持3个重绘区域,超出时会被合并产生更大的重绘区域


CPU优化—动画

明确美术制做规范并严格要求,尽量避免美术元件中以下内容的出现

滤镜、透明、显示样式、混合模式
过多的子元件、嵌套动画
对元件进行缩放,比较常见的小图大画
补间动画
遮罩
使用cacheAsBitmap

从策略上使用“缓存为位图”,将复杂图形、文件本“缓存为位图”能有效的降低CPU消耗,提高游戏性能
不要对动画使用,当元件内容、大小发生改变时Flash需要重新生成内部位图,反而增加CPU消耗
cacheAsBitmap不会导致生成的swf文件增加,在性能上却能带来良好的提升,能够满足大部份性能要求,虽然比直接使用位图资源要差一点。
使用位图资源

Flash的位图渲染非常快,能大幅降低CPU消耗,提升游戏性能
尽量避免使用MovieClip,采用位图替代
将动画转换为一组位图,通过不停的更换bitmapData实现动画播放
问题:文件、内存增加

文件增加是不可避免的,在允许的情况下采用更低品质能有效减小文件。
内存增加并非绝对,而且很多内容只是临时使用会很快被释放,短时间内的内存增加不会有明显的性能影响。
某些情况下美术提供的矢量图资源生成的文件和位图资源的相差不大,可以优先采用位图
CPU优化—复杂计算

因为动画占用的比重太大,算法优化对Flash的CPU影响很不明显,但采用执行效率高的处理方式也很重要


优化的误区:低CPU就是高性能

常见表现:

CPU不高但帧率低或不稳定

原因

1、不合理的资源管理

某些操作执行时间过长:构造大型元件、耗时的计算过程

2、渲染时间过长也会出现CPU低但帧率达不到要求



优化Flash游戏性能—帧率

帧率的变化对游戏体验有着直接的影响

以每秒25帧为例,平均第帧40ms,如果超出该时间会导致帧率不稳定或下降,进而引起游戏不流畅甚至画面卡顿。

如何控制帧时间

算法优化,尽量减少执行时间
时间片
某些处理确实很费时也很耗CPU,可以将这个处理分散成更小的过程,每帧执行一部份
控制每帧的处理量,使执行时间在40ms以内,剩下的在下一帧继续处理
问题:代码变得复杂
除了代码执行时间还要考虑渲染时间,当舞台上大量显示元素时,渲染也很费时

优化渲染方式:使用位图
新的内容
位块传输(Blitting)
不被看好的Stage3D,但可以用来做2D图形加速


其他:

发布选项

文件的发布参数对游戏性能也有直接的影响
将播放器版本设置在10以上(使用FlashCS3制做的文件默认为9) ,Flash10相对9有很多改进的地方:

位图重用
MovieClip跳帧机制
关闭调试、省略trace

diazynez 发表于 2017-7-7 20:51:48

顶      

lkp 发表于 2017-7-7 23:10:41

说的好!希望死火也能如此非常流畅

lesliehuang 发表于 2022-9-7 14:33:33

在优化后一定要再次使用监控工具检查优化结果

lrz12138 发表于 2022-10-6 09:48:35

虽然我看不懂,但我还是大受震撼

剑八 发表于 2022-12-22 21:45:25

很有用,玩bvn没那么卡了
页: [1]
查看完整版本: 性能!性能!还是性能!FLASH的游戏的性能优化