as3程序节能癖
天马行空, 只为节能!
以下做法只为提高as3程序的运行效率。
1.尽量保证程序系统只有一个Event.EnterFrame事件或一个Timer驱动的时钟机制。
2.一个程序系统中可能有数以百计的for等循环,如果全部含有i++或i--那么这里的cpu消耗就很大,因此极力建议避免i++或i--的运算,而改用对引用的比较或其他方式来实现循环。(这是一个希望)
3.尽量避免没用的多余的复杂图形出现在程序系统中。
4.遇到碰撞检测或图形几何相关的检测,需建立简易几何模型代替实际有系统提供的hitTest以及其他相关的检测。例如矩形和圆实际就可以完全胜任。如果需要更精细,那就要启用以线段为基础的多变形来实现检测。这里举例说明一点,例如有的做法是在一个剪辑内建立一个形状(可能是透明的)来实现检测,这实际会暂用更多的cpu,因此要尽量避免。
5.在视觉编程的时候,帧频不宜过高,如果想获得高帧频的效果,就要特别的处理。(这里并没有提倡说要用Timer来代替什么)
6.视觉编程的时候建议将视觉对象和视觉逻辑数据分开。这样做以后就会实现运算首先是对逻辑数据做运算,至于此逻辑数据对应的视觉对象是不是要显示出来,那就要看实际情况了。要需要显示才显示。这里举个简单的例子说明:
例如一个大地图(2000x2000)上有很多人物在行走,但是你的可是区就是800x600的,那么这个区域以外的人物就先让他退出显示列表,有一个逻辑值来代替其真实的视觉对象。只有当其走到玩家能看到的区域了以后才将其加入显示列表呈现出来。
7.不执行 !boo类似的多余运算。
假如有一个变量boo是布尔值,而且只有其为false的时候才能继续执行下面的语句块那么实现方式有如下两种:
a:
if( !boo ){
//待执行语句
}
b:
if( boo ){
}else{
//待执行语句
}
潜意识里面,我会选择 b 的实现方式,因为我认为b少执行了一个 ! 的运算。
8. 当程序中的条件判断的时候有多个域、或、非的条件表达式组合的时候,需要将最容易判断出来的条件表达式,放在最左边。
9.假如有一个单态类Singleton,他有一个记录其实例的静态变量_instance,并且它有一个获得其实例的静态方法, 此方法有两种实现方式:
方式a:
public static function getInstance():Singleton{
if(_instance == null){
return new Singleton();
}
return instance;
}
方式b:
public static function getInstance():Singleton{
if(_instance != null){
return _instance;
}
return new Singleton();
}
对于上面两种实现方式我会选择 方式b。原因在于对于单态只有一次new动作。
单态类示例见此文:http://www.cnblogs.com/vilyLei/articles/1623667.html
10.如果有大量的" == "比较运算,建议尽量多的采用引用比较,而不是值比较。
11.数学运算中尽量减少开方除法等的复杂运算。