关于Flash 页游中的那些优化1

一直在从事回合制战斗的RPG页游前端开发,转眼已经三年了,总结记录一下自己的心得,希望也能给别人带来帮助

1. 性能优化

几乎在所有的页游中,我们都会碰到各种各样的性能问题,我们也不例外,游戏的整个性能效率水平都是从小优化中而来,因此先来复习下大部分我所熟知的优化点,这些点你应该页游在其他人的文章中见过

  • 在大批量使用事件的情况,我们可以考虑用观察者模式来实现事件机制替代原声的事件机制(这里要注意一个用数组来保存侦听器时,记得在执行侦听器的时候拷贝一份数组,数组遍历删除其中一个侦听器,会导致数组后面的项都会移位)
  • 大批量的实例化时,可以考虑池来实现
  • 减少Timer的使用,尽量在游戏中统一用一个Timer来管理需要使用Timer的对象。
  • 扁平化显示列表。能用bitmap实现,就别在外面包一个Sprite
  • 少去修改现实对象层级,减少重绘。
  • 将不需要鼠标事件的对象的MouseEnabled, MouseChildren属性全部设置为False。
  • 尽量使用内联代码,而不是去if判断或者case判断来确定哪个分支程序应该被执行。
  • 在多次重复执行的代码块,可以做一个检查是否相同判断。或者用Event.RENDER事件来确保只在每帧渲染前执行一次。
  • 存储数据比较大的话尽量用Vector而不是Array
  • 如果有多个实例对象侦听同一个冒泡事件,可以只在父容器建立侦听器就可以。
  • 对于 TextField 对象,请使用 appendText() 方法,而不要使用 += 运算符。

上面的这些优化点,有的是优化代码执行效率,有的是优化渲染效率。这些优化的基础是建立在flash AVM机的基础上来说的。要提高AVM机的效率,其实就是要减少FLASH 每一帧的耗时,我们通过scout工具来看看AVM机每一帧做了什么东西
这里写图片描述

可以看到一个竖条上有橙色,绿色,蓝色
这就是一帧里面各个操作所花费的总时间,橙色代表AVM机自身的耗时,例如垃圾回收,派发原生事件等
绿色代表渲染耗时,主要计算脏矩阵,栅格化边缘;蓝色代表AS代码执行的时间。这三部分的时间总和几乎就是每一帧的总耗时,所以我们优化就是减少这三部分的时间

这里写图片描述
相关内容请阅读:借助 Adobe Scout 理解 Flash Player

熟悉了AVM机工作的机制,然后分析来进行相应的优化,这是解决性能问题的根本之道。
减少as代码的执行时间,上面已经列举了一些,这里我们增加一些对渲染耗时优化。
渲染的过程主要包括计算脏矩阵,渲染脏矩阵,复制到屏幕,三大部分
而渲染脏矩阵主要包含了2个小步:构建边缘,栅格化像素。
影响这里的主要耗时,主要是在栅格化边缘这一部分。
为了减少每一帧的渲染因此减少脏矩阵的区域,也就是减少重绘的区域,非常重要。
栅格化的时间耗费主要取决于像素数量以及绘制每个像素的成本。绘制纯色的代价最低,而绘制带有多层 alpha 混合的旋转和缩放位图则相当昂贵!

因此减少渲染耗时可以主要从以下几点入手:
1. 减少重绘的机会
2. 减少重绘的区域
3. 减少混合,旋转,变换,缩放,透明等组合,减少显示对象的层数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值