(1)数据存储方式的选择
使用如下几种存取数据方式进行存取100万次运算,所花时间依次为(单位为毫秒,ms):如下几种存取数据方式100万次存取运算效率依次为: 类定义中的属性(如public、private类属性) 135 毫秒
1. Point类对象 140毫秒
2. Rectangle类对象(x等属性) 140ms
3. Array类对象 270ms
4. Object类对象 500 ms
5. 动态类动态属性 550ms
6. Rectangle类对象(left等属性) 700ms
7. 自定义类getter/setter 1000ms
8. 自定义类Function 1000ms
最快的是第一类,速度是Array的两倍,Object的四倍,getter/setter的约八倍。存取坐标要用Point和Rectangle,比Array快的多。 Object和动态类效率较低,一般情况下请尽量使用密封类。
(2)场景中的MovieClip或Sprite在清除之前一定要用removeEventListener把上面所有的事件清除掉,这样系统才会gc掉。
(3)使用cacheAsBitmap进行位图缓存,对图形颜色多,元素多的加快CPU的处理速度。
(4)位图在运算速度上很快,但是在尺寸上变得很大,而矢量图虽然尺寸很小,但是在图形渲染上很占CPU资源,所以要选择尽量色差小,颜色简单的图形用矢量来做。大量复杂的图形可用位图代替。
(5)资源的压缩,矢量图中线段数量也决定了图形渲染的快慢。可以采用flash软件自带的修改->形状->优化,减少图形中的线条的数量。
(6)尽量采用低级运算和内部方法
用unit()或int()代替取整运算Math.floor()和Math.ceil()。
比如var test:uint = uint(1.5);要比var test:Number = Math.floor(1.5);快;
而var test:uint = uint(1.5)+1;要比var test:Number = Math.ceil(1.5);也快。
如果是Math.floor(),还可以用位运算(>>0)来代替。
比如var test:uint =1.5>>0,比unit()或int()更快。用乘-1来代替Math.abs()方法。比如var nn:Number = -23;var test:Number= nn < 0 ? nn * -1 : nn;要比var nn:Number = -23;var test:Number = Math.abs(nn);快。当然还有更多的优化计算的方法。一般来说,低级运算要比高级运算速度;内部方法比调用其他方法速度快。
(7)在各种重要的代码优化手段中,有这么一条:在定义局部变量的时候,一定要用关键字var来定义,因为在Flash播放器中,局部变量的运行速度更快,而且在他们的作用域外是不占用系统资源的。
(8)在编写游戏时尽量不要把帧频设得太高,太高的帧频会导致CPU计算量加大。
(9)我们常用的关键字:for in 可以代替其它的循环语句。
(10)不要过多使用 Object 类型。数据类型注释应力求精确,这样可以提高性能。只有在没有适当的备选数据类型时,才使用 Object 类型。同时也便于代码管理,时刻知道对象的类型和作用。同时也有利于编译器编译时优化 (11)对于类型是MovieClip等需要绘图的对像,能重复用的就重复用,比如删除一个对像后如果重新使用它,先判断if(mc == null)存不存在,存在就不再给它赋一个新的对像了。
(12):善用对像池功能,在制作大型游戏时,往往会用到很多一模一样的影片剪辑,把从场景中删除的对像放入对像池中,当需要用到对像时,可以从池中直接创建新的对像来保证内存的占用。
(13)Lib注册机制,在制作大型的游戏时,往往是多人分工,一个游戏维护起来也相当复杂,这时可以采用Lib文件的注册方式添加游戏的事件管理。统一由一个时间片,或一个侦听池管理。减少了游戏运行时的负担,也起到了多人维护的作用。
(14)使 ActionScript 尽量简单。
限制使用的循环数和每个循环包含的代码数。
关闭trace。运行期间不断打印会影响速度。
在AS中尽量不用或少用除法运算符。如果可能的话,用乘法代替除法,比如:
var b = a / 4;用下面的乘法运算来替代:var b = a * 0.25;
尽量避免字符串和数组处理过长的数据,因为这会非常消耗 CPU。