数码资讯
优化FlashActionscript代码的三种方法
在第一章AS3的评论 来源:John Grden Blog 1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。 2。位操作 第一章AS3的一些优化方法 来源:John
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在第一章AS3的评论
来源:John Grden Blog
1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。
2。位操作
第一章AS3的一些优化方法
来源:John Grden Blog
1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。
2。使用位运算代替2或乘以2,例如,10 > 1比10×2快,10 > 1代替13 2,虽然前者比后者快,但2的结果不一样,所以我们还是要看具体情况。
单元(3)或int()而不是math.floor(数学。细胞)和舍入运算()。例如,VaR测试:单元为单位(1.5);无功测试:数量= math.floor(1.5);速度;VAR测试:单元为单位(1.5)1;它比VaR测试快:数= math.ceil(1.5);还快。如果是Math.floor(),你也可以使用位操作(> > 0)代替。VAR测试:单元= 1.5 > > 0,例如,比单位()或int()。
4。用1代替math.abs()方法。例如,VAR NN:数量= 23;var测试:数量= NN<0 NN * 1:神经网络;VAR NN:数量= 23;快速。
当然,有更多的方法来优化计算,一般来说,低级操作比高级操作快;内部方法比调用其他方法快得多。
在第一章AS3的评论
来源:John Grden Blog
1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。
2。位操作
第二章Actionscript优化指南
源gotoandstop.it
原来的Marco Lapi,alias Lapo,胡翻译
在这篇文章中,我们将讨论各种优化Actionscript代码的方法。
此外,我们还对一些典型的游戏代码进行了一系列的测试,以最大程度地提高Flash播放器的性能。
何时进行优化
现有程序的优化有时很长,也很困难,这与原始代码的非优化程度有关。因此,在投入大量时间进行代码优化之前,最重要的是估算修改或替换代码的位置。
游戏代码中最重要的部分是主循环体。通常,循环体在flash的每一帧上执行,在游戏中控制角色属性和重要的数据参数,对于主循环以外的部分,也可能是次要的循环部分。我们还应该注意它是否分配了太多的资源,而不是分配给那些需要更多资源的核心部分。
通过积蓄在所有时间内的积蓄(可能每次都只有几毫秒),你会发现你的SWF运行得比较稳定,而且大大增强了游戏的感觉。
简洁高效的代码
写的非常简洁的这是一个很好的工作,可以调用代码(有时对象为主),但这需要多年的编程经验。对于OOP(面向对象编程,面向对象编程),有些场合根本无法利用它,这使得它非常奢侈的,有限的资源条件下(也许Flash播放器的原因),通过更先进的方法,如面向对象刚才所提到的,它可能导致不理想的结果。
我们不是说OOP对游戏编程不好,但在某些情况下它似乎过于奢侈和多余。毕竟,有时候,传统的方法可以得到更好的结果。
在一般情况下,最好使用面向对象的技术,因为它使代码维护更容易。但在后来的文字,你会看到,有时为了充分发挥flashplayer性能,而不是使用面向对象的编程技术,例如:处理快速滚动或计算很复杂的数学问题。
基本的优化
当我们提到的代码优化,我们会立即想到在执行速度的改进,很少考虑系统资源的分配。这是因为,即使在今天,甚至被淘汰的计算机有足够的内存来运行我们的大多数Flash游戏(128M的内存是足以满足大多数情况的需要512M的内存是当今新电脑的基本配置)。
变量
在各种重要的代码优化方法中,A:在定义一个局部变量时,必须使用var关键字来定义,因为在flash播放器中,本地变量的运行速度比较快,而且在它们的范围内不占系统资源的消耗。
附加的:var变量只有括号内对;生命是一个个人认为没有系统编程的地方。
awmc.onload =函数(){
var=1;
}
awmc.onenterframe =函数(){
这个变量不存在
}
一段非优化代码:
函数doSomething()
{
MX = 100
我= 100
新数组()
为(y=0;y <我;y)
{
为(x=0;x;
{
i =(y * MX)x
ARR {我} =我
}
}
报酬
}
此代码不声明函数体中的变量(仅用于函数中的变量)是局部变量,这些变量使这些变量比参与者慢,并且当函数完成时仍然占用系统资源。
以下是相同功能的改进代码:
函数doSomething()
{
var = 100
var = 100
新数组()
对于(y=0;y <我;y)
{
对于(x = 0;x;
{
var =(y * MX)x
ARR {我} =我
}
}
报酬
}
这样,所有的变量都被定义为局部变量,它们可以被玩家更快地调用,这在函数在大量的(10000)周期中尤为重要,当函数调用结束时,相应的局部变量被破坏,它们所占用的系统资源被释放。
onEnterFrame事件
onEnterFrame事件对于游戏开发者来说是非常有用的,它允许我们运行一段程序快速反复按默认的帧频(FPS)。记得在Flash5的时代,这(onEnterFrame实时监控)是一种非常流行的技术,使用该事件来控制机器博弈对手的逻辑,或者我们可以设置这样的事件在每颗子弹子弹的碰撞检测。
事实上,我们不建议增加这样的事件太多moveclip,因为这将导致的出现,意大利面代码,它将很容易导致程序效率显著降低。
在大多数情况下,一个单一的onEnterFrame事件可以解决:使用这个主循环执行你所需要的。
另一个简单的方法是设置适当的帧频率:帧频率越高,CPU资源就越多。
当帧速率是25-35(FPS),在每一帧是不够好,执行更复杂的代码,即使你的电脑配置较低。因此,我们不建议使用帧速率60以上(FPS)无特殊要求。
矢量图和位图
我们必须在处理图形做出正确的选择。Flash矢量图和位图可以完美兼容,但矢量图和位图在精神本质的不同。
在矢量图的使用,我们必须简化自己的形状尽可能去除多余的终点。这将大大减少计算,玩家使用目前矢量图量。另一个重要方面是线,减少和避免冗余线路结构的使用,因为它们会直接影响效率Flash播放。
当一个实例的透明度小于100时,它也会影响播放速度。因此,如果您发现Flash播放速度太慢,请选择这些透明的示例。
然后,如果你真的需要一个更复杂的场景,你最好考虑使用位图实现。虽然在位图绘制效率的闪光不是最优越的(如Flash和导演比他哥哥;;),但丰富的视觉内容只有位图(与复杂的矢量图形位图绘制率是非常低的,这也是很多)块上的游戏广泛的像素图作为背景的原因。顺便说一下,虽然有一些支持Flash的GIF,JPG和PNG,PNG仍然在渲染速度的绝对优势。所以我们建议Flash中的位图用作PNG格式。
这部电影剪辑的能见度(影片剪辑){以下简称MovieClip简称MC }
您可能经常会遇到这样的情况:游戏中有大量的不可见的屏幕MC等待出现(如地图、字符等)。
你知道,玩家仍然需要消耗一定量的资源来处理这些不可见的屏幕MC,即使它们是单一的和不可玩的。
最好的解决方案之一是给这些MC一个空白的框架。当他们不出现在屏幕上,你可以跳到这架与gotoAndStop()语句,从而减少对资源的玩家的需求。
一定要记住,在这种情况下,一套简单的可见性属性是不可见的(_visible = false)是无效的,而玩家将继续根据帧的复杂度,停留或是MC分配资源。
阵列
阵列广泛应用于各种需要记录数据的应用程序和游戏中。
一个典型的例子是基于块的Flash游戏,其中一个地图有时是存储在一个二维数组arr的Y形{ } {X}。虽然这是一个很常见的方法,它可以在一维数组是用来提高程序的效率。提高阵列效率的另一个重要途径是使用在循环遍历数组中代替传统的for或while循环语句的语法。
例如:
代码的一部分如下所示
(我对VaR在ARR)
{
如果(ARR {我} > 50)
{
做某事
}
}
它的执行速度显著高于这段代码:
为(var i=0;i < 10000;i)
{
如果(ARR {我} > 50)
{
/ /做某事
}
}
前者比后者效率高30%,当你的游戏按帧执行这个代码框架时,这个数字更有价值。
先进的优化:
1)循环和while循环
使用while循环的效率要比for循环好,但是用for循环读取数组中的数据是最好的选择。
所以我们不推荐使用:
为(var i=0;i < 1000;i)
{
做某事
}建议使用
var i = 1
(i<1000)
{
做某事
}
2)从数组读取数据
通过测试,我们发现,在循环的效率比其他环看uff1a高得多。
ARR = { }
max = 5000
数组分配
为(i = 0;i < max;i)
{
ARR {我} =我
}
var项目= null
for循环
对于(var i = 0;i < max;i)
{
项目= ARR {我}
}
for循环
(我对VaR在ARR)
{
项目= ARR {我}
}
while循环
i = 1
同时(i < max)
{
项目= ARR {我}
}
3)将数据写入数组(同时,)
您可以看到while循环稍微优越一些。
4)_global(全局)变量和时间变量(时间轴)
我们猜想,使用全局变量可以提高变量调用的速率,但效果并不像预期的那么明显。
5)单排和多变量赋值
我们发现,单行变量赋值的效率远远高于多行赋值:
= 0
B = 0
C = 0
D = 100
E = 100
效率不如:
a = b = c=0
d = e=100
6)变量名寻址
本试验反映了变量名的preaddressing的重要性,尤其是当它运行,就要给一点丁第一,大大节省了处理时间。
例如:
var = null
T = getTimer()
对于(var i = 0;i < max;i)
{
Num = math.floor(max)- Math.ceil(Max)
}
t1.text =总是查找:(getTimer()t)
没那么好:
T = getTimer()
var = math.floor地板
VaR细胞= math.ceil
对于(var i = 0;i < max;i)
{
Num =地板(max)-细胞(最大)
}
7)短变量名和长变量名
变量的名称越短,效率越高。考虑到长变量名称也有其优点(例如,易于维护),建议在关键位置(如大量循环)中使用短变量名,最好是1-2个字符。
8)宣告变量之前和之后的周期
在测试之前,我们认为变量的循环前声明节省时间,但测试结果不明显,甚至相反!
内部语句
T = getTimer()
对于(var i = 0;i < max;i)
{
var test1 =我
}
t1.text =内(getTimer()t)
外部语句
T = getTimer()
VaR test2
对于(var i = 0;i < max;i)
{
test2 =我
}
9)使用嵌套if结构
当使用一个复杂的条件表达式时,将其分解成一个嵌套的独立判断结构是最好的解决方案!
max = 20000
= 1
B = 2
C=3
D = 4
最大值
而(- - 1)
{
如果(a = 1 = 3 = 2 = C=D=4)
{
var
}
}
法官节省了更多的时间。
最大值
而(- - 1)
{
如果(a=1)
{
如果(b = 2)
{
如果(c=3)
{
如果(d=4)
{
var
}
}
}
}
}
10)寻找局部变量(与用这种方法比较)
局部变量的定位方法很多,我们发现用它比用这种方法更有利!
obj = { }
Obj = 1。
obj。B = 2
Obj。C = 3
obj。D = 4
obj。E = 5
obj。F = 6
obj。G = 7
H = 8的目标。
obj.test1 =使用
obj.test2 =使用
max = 10000
()函数的使用
{
最大值
而(- - 1)
{
这个= 1
b = 2
这个,C=3
这个。d=4
这个= E=5
这个,f=6
这个G = 7
h=8
}
}
()函数使用
{
最大值
而(- - 1)
{
用(这个)
{
= 1
B = 2
C = 3
D = 4
E = 5
F = 6
G = 7
H = 8
}
}
}
11)循环监视键盘事件
正如刚才提到的地址,我们实现了一个点的更好的效率,例如:
key.isdown KeyDown =
keyleft = key.left
如果使用我们(keydown(keyleft))
附录:我们测试了关键代码和键值常量的效率,没有太大差别。
12)math.floor()方法和int()
这个问题已经在flashkit论坛讨论。试验表明,旧的int的方法更有效。我们的测试结果也反映了这一。
13)表达式求值和括号语法
我们没有发现显著的差异,而不是如前所述,旧的表达式求值在括号中没有优势。
VaR MC = eval(_root。mymc 我)
VaR MC = _root {mymc 我}
近16 / / MC效率)享受同样的循环:asbroadcaster周期差异
结论
我们从这些测试的结果中发现,我们可以大大提高脚本对于不同需求和不同代码的执行效率,尽管我们列出了许多优化代码的方法,但我们需要自己测试。有很多实验,我们可以来我们的论坛。
哦:
最后,翻译,我也学到了很多好东西,和其他人可以去官方gotoAndPlay,也可以来我的博客!
在第一章AS3的评论
来源:John Grden Blog
1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。
2。位操作
第三章黑羽经验:Actionscript代码优化
来源:Kingda的博客
本文不仅论述了优化代码,但不深入到面向对象的设计水平。一些在Flash8帮助提到的代码优化原则的解释和说明。
指南来自flash8的帮助下,我取得了一些解释。
1。避免多次从循环调用函数。
小函数的内容包含在循环中,使效果更好,小函数的生命周期短,有利于资源的释放,特别是在一个大周期内。
2。尽可能使用本地函数。
本机函数运行比用户更快的定义函数。原生功能是多功能(内在)在闪光,如hitTest(),你不必写一个相似的自己。
三.不要使用对象类型太多。
数据类型注释应该是精确的,这样才能提高性能。只有在没有合适的替代数据类型时才使用对象类型,而且还易于管理代码,并且总是知道对象的类型和功能。
同时,它也有利于编译器编译时优化。
4。避免使用eval()函数或数据访问操作。
一般来说,它是更有效的建立一个本地参考的只有一次。不要使用eval,例如,当转换为影片剪辑_droptarget。
5。给array.length在循环的开始一个变量,尤其是大环。
Array.length是一个变量(如VaR iLength:数)在循环的开始,这是作为一个条件,而不是使用myarr.length本身。
的原因,在环,iLength是数变,将登记和更有效的比访问数组和变长。例如,可以使用
无功fontarr:数组textfield.getfontlist();
无功arraylen:数量= fontarr.length;
对于(var i:数量= 0;i < arraylen;我){
微量(fontarr {我});
}
而不是:
无功fontarr:数组textfield.getfontlist();
对于(var i:数量= 0;i < fontarr.length;我){
微量(fontarr {我});
}
6。注意循环的优化和重复动作的优化。
Flash播放器需要花费大量的时间来处理回路(如循环使用setInterval()函数)。
7。当局部变量足够时,不要使用全局变量。类静态变量也不太有用。
全局变量是开发人员的噩梦,如果我们真的需要全局变量,我建议使用单例设计模式进行管理。
8。在声明变量时,添加var关键字。
这是编译器让编译器知道变量类型并优化编译。
黑羽添加:对关键词要谨慎使用。
它不赞成使用关键字作为自己的方法和属性名称,除非您确认后续开发不使用相同的事件名和属性名。
但是你怎么知道Flash使用了多少隐藏关键字呢太多 uff01for例子,类名,无效,刷新,mouseover等不常用的关键词,最好的方法是使用下肢编辑器编写代码,这凸显了所有发表和未发表的关键词。
而且,由于可以重复常用的事件名称,如启动、加载等,给代码带来不必要的修改和麻烦。
9。对于涉及调用绘图资源的函数,请尽可能地再次判断和调用。
在绘图资源调用中,所有更改、位置更改、删除MC、组件和其他函数的创建都涉及到,在许多情况下,尝试逻辑地判断变量或对象的属性,并在必要时调用这些函数。这样可以节省更多的计算资源。
来源:John Grden Blog
1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。
2。位操作
第一章AS3的一些优化方法
来源:John Grden Blog
1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。
2。使用位运算代替2或乘以2,例如,10 > 1比10×2快,10 > 1代替13 2,虽然前者比后者快,但2的结果不一样,所以我们还是要看具体情况。
单元(3)或int()而不是math.floor(数学。细胞)和舍入运算()。例如,VaR测试:单元为单位(1.5);无功测试:数量= math.floor(1.5);速度;VAR测试:单元为单位(1.5)1;它比VaR测试快:数= math.ceil(1.5);还快。如果是Math.floor(),你也可以使用位操作(> > 0)代替。VAR测试:单元= 1.5 > > 0,例如,比单位()或int()。
4。用1代替math.abs()方法。例如,VAR NN:数量= 23;var测试:数量= NN<0 NN * 1:神经网络;VAR NN:数量= 23;快速。
当然,有更多的方法来优化计算,一般来说,低级操作比高级操作快;内部方法比调用其他方法快得多。
在第一章AS3的评论
来源:John Grden Blog
1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。
2。位操作
第二章Actionscript优化指南
源gotoandstop.it
原来的Marco Lapi,alias Lapo,胡翻译
在这篇文章中,我们将讨论各种优化Actionscript代码的方法。
此外,我们还对一些典型的游戏代码进行了一系列的测试,以最大程度地提高Flash播放器的性能。
何时进行优化
现有程序的优化有时很长,也很困难,这与原始代码的非优化程度有关。因此,在投入大量时间进行代码优化之前,最重要的是估算修改或替换代码的位置。
游戏代码中最重要的部分是主循环体。通常,循环体在flash的每一帧上执行,在游戏中控制角色属性和重要的数据参数,对于主循环以外的部分,也可能是次要的循环部分。我们还应该注意它是否分配了太多的资源,而不是分配给那些需要更多资源的核心部分。
通过积蓄在所有时间内的积蓄(可能每次都只有几毫秒),你会发现你的SWF运行得比较稳定,而且大大增强了游戏的感觉。
简洁高效的代码
写的非常简洁的这是一个很好的工作,可以调用代码(有时对象为主),但这需要多年的编程经验。对于OOP(面向对象编程,面向对象编程),有些场合根本无法利用它,这使得它非常奢侈的,有限的资源条件下(也许Flash播放器的原因),通过更先进的方法,如面向对象刚才所提到的,它可能导致不理想的结果。
我们不是说OOP对游戏编程不好,但在某些情况下它似乎过于奢侈和多余。毕竟,有时候,传统的方法可以得到更好的结果。
在一般情况下,最好使用面向对象的技术,因为它使代码维护更容易。但在后来的文字,你会看到,有时为了充分发挥flashplayer性能,而不是使用面向对象的编程技术,例如:处理快速滚动或计算很复杂的数学问题。
基本的优化
当我们提到的代码优化,我们会立即想到在执行速度的改进,很少考虑系统资源的分配。这是因为,即使在今天,甚至被淘汰的计算机有足够的内存来运行我们的大多数Flash游戏(128M的内存是足以满足大多数情况的需要512M的内存是当今新电脑的基本配置)。
变量
在各种重要的代码优化方法中,A:在定义一个局部变量时,必须使用var关键字来定义,因为在flash播放器中,本地变量的运行速度比较快,而且在它们的范围内不占系统资源的消耗。
附加的:var变量只有括号内对;生命是一个个人认为没有系统编程的地方。
awmc.onload =函数(){
var=1;
}
awmc.onenterframe =函数(){
这个变量不存在
}
一段非优化代码:
函数doSomething()
{
MX = 100
我= 100
新数组()
为(y=0;y <我;y)
{
为(x=0;x;
{
i =(y * MX)x
ARR {我} =我
}
}
报酬
}
此代码不声明函数体中的变量(仅用于函数中的变量)是局部变量,这些变量使这些变量比参与者慢,并且当函数完成时仍然占用系统资源。
以下是相同功能的改进代码:
函数doSomething()
{
var = 100
var = 100
新数组()
对于(y=0;y <我;y)
{
对于(x = 0;x;
{
var =(y * MX)x
ARR {我} =我
}
}
报酬
}
这样,所有的变量都被定义为局部变量,它们可以被玩家更快地调用,这在函数在大量的(10000)周期中尤为重要,当函数调用结束时,相应的局部变量被破坏,它们所占用的系统资源被释放。
onEnterFrame事件
onEnterFrame事件对于游戏开发者来说是非常有用的,它允许我们运行一段程序快速反复按默认的帧频(FPS)。记得在Flash5的时代,这(onEnterFrame实时监控)是一种非常流行的技术,使用该事件来控制机器博弈对手的逻辑,或者我们可以设置这样的事件在每颗子弹子弹的碰撞检测。
事实上,我们不建议增加这样的事件太多moveclip,因为这将导致的出现,意大利面代码,它将很容易导致程序效率显著降低。
在大多数情况下,一个单一的onEnterFrame事件可以解决:使用这个主循环执行你所需要的。
另一个简单的方法是设置适当的帧频率:帧频率越高,CPU资源就越多。
当帧速率是25-35(FPS),在每一帧是不够好,执行更复杂的代码,即使你的电脑配置较低。因此,我们不建议使用帧速率60以上(FPS)无特殊要求。
矢量图和位图
我们必须在处理图形做出正确的选择。Flash矢量图和位图可以完美兼容,但矢量图和位图在精神本质的不同。
在矢量图的使用,我们必须简化自己的形状尽可能去除多余的终点。这将大大减少计算,玩家使用目前矢量图量。另一个重要方面是线,减少和避免冗余线路结构的使用,因为它们会直接影响效率Flash播放。
当一个实例的透明度小于100时,它也会影响播放速度。因此,如果您发现Flash播放速度太慢,请选择这些透明的示例。
然后,如果你真的需要一个更复杂的场景,你最好考虑使用位图实现。虽然在位图绘制效率的闪光不是最优越的(如Flash和导演比他哥哥;;),但丰富的视觉内容只有位图(与复杂的矢量图形位图绘制率是非常低的,这也是很多)块上的游戏广泛的像素图作为背景的原因。顺便说一下,虽然有一些支持Flash的GIF,JPG和PNG,PNG仍然在渲染速度的绝对优势。所以我们建议Flash中的位图用作PNG格式。
这部电影剪辑的能见度(影片剪辑){以下简称MovieClip简称MC }
您可能经常会遇到这样的情况:游戏中有大量的不可见的屏幕MC等待出现(如地图、字符等)。
你知道,玩家仍然需要消耗一定量的资源来处理这些不可见的屏幕MC,即使它们是单一的和不可玩的。
最好的解决方案之一是给这些MC一个空白的框架。当他们不出现在屏幕上,你可以跳到这架与gotoAndStop()语句,从而减少对资源的玩家的需求。
一定要记住,在这种情况下,一套简单的可见性属性是不可见的(_visible = false)是无效的,而玩家将继续根据帧的复杂度,停留或是MC分配资源。
阵列
阵列广泛应用于各种需要记录数据的应用程序和游戏中。
一个典型的例子是基于块的Flash游戏,其中一个地图有时是存储在一个二维数组arr的Y形{ } {X}。虽然这是一个很常见的方法,它可以在一维数组是用来提高程序的效率。提高阵列效率的另一个重要途径是使用在循环遍历数组中代替传统的for或while循环语句的语法。
例如:
代码的一部分如下所示
(我对VaR在ARR)
{
如果(ARR {我} > 50)
{
做某事
}
}
它的执行速度显著高于这段代码:
为(var i=0;i < 10000;i)
{
如果(ARR {我} > 50)
{
/ /做某事
}
}
前者比后者效率高30%,当你的游戏按帧执行这个代码框架时,这个数字更有价值。
先进的优化:
1)循环和while循环
使用while循环的效率要比for循环好,但是用for循环读取数组中的数据是最好的选择。
所以我们不推荐使用:
为(var i=0;i < 1000;i)
{
做某事
}建议使用
var i = 1
(i<1000)
{
做某事
}
2)从数组读取数据
通过测试,我们发现,在循环的效率比其他环看uff1a高得多。
ARR = { }
max = 5000
数组分配
为(i = 0;i < max;i)
{
ARR {我} =我
}
var项目= null
for循环
对于(var i = 0;i < max;i)
{
项目= ARR {我}
}
for循环
(我对VaR在ARR)
{
项目= ARR {我}
}
while循环
i = 1
同时(i < max)
{
项目= ARR {我}
}
3)将数据写入数组(同时,)
您可以看到while循环稍微优越一些。
4)_global(全局)变量和时间变量(时间轴)
我们猜想,使用全局变量可以提高变量调用的速率,但效果并不像预期的那么明显。
5)单排和多变量赋值
我们发现,单行变量赋值的效率远远高于多行赋值:
= 0
B = 0
C = 0
D = 100
E = 100
效率不如:
a = b = c=0
d = e=100
6)变量名寻址
本试验反映了变量名的preaddressing的重要性,尤其是当它运行,就要给一点丁第一,大大节省了处理时间。
例如:
var = null
T = getTimer()
对于(var i = 0;i < max;i)
{
Num = math.floor(max)- Math.ceil(Max)
}
t1.text =总是查找:(getTimer()t)
没那么好:
T = getTimer()
var = math.floor地板
VaR细胞= math.ceil
对于(var i = 0;i < max;i)
{
Num =地板(max)-细胞(最大)
}
7)短变量名和长变量名
变量的名称越短,效率越高。考虑到长变量名称也有其优点(例如,易于维护),建议在关键位置(如大量循环)中使用短变量名,最好是1-2个字符。
8)宣告变量之前和之后的周期
在测试之前,我们认为变量的循环前声明节省时间,但测试结果不明显,甚至相反!
内部语句
T = getTimer()
对于(var i = 0;i < max;i)
{
var test1 =我
}
t1.text =内(getTimer()t)
外部语句
T = getTimer()
VaR test2
对于(var i = 0;i < max;i)
{
test2 =我
}
9)使用嵌套if结构
当使用一个复杂的条件表达式时,将其分解成一个嵌套的独立判断结构是最好的解决方案!
max = 20000
= 1
B = 2
C=3
D = 4
最大值
而(- - 1)
{
如果(a = 1 = 3 = 2 = C=D=4)
{
var
}
}
法官节省了更多的时间。
最大值
而(- - 1)
{
如果(a=1)
{
如果(b = 2)
{
如果(c=3)
{
如果(d=4)
{
var
}
}
}
}
}
10)寻找局部变量(与用这种方法比较)
局部变量的定位方法很多,我们发现用它比用这种方法更有利!
obj = { }
Obj = 1。
obj。B = 2
Obj。C = 3
obj。D = 4
obj。E = 5
obj。F = 6
obj。G = 7
H = 8的目标。
obj.test1 =使用
obj.test2 =使用
max = 10000
()函数的使用
{
最大值
而(- - 1)
{
这个= 1
b = 2
这个,C=3
这个。d=4
这个= E=5
这个,f=6
这个G = 7
h=8
}
}
()函数使用
{
最大值
而(- - 1)
{
用(这个)
{
= 1
B = 2
C = 3
D = 4
E = 5
F = 6
G = 7
H = 8
}
}
}
11)循环监视键盘事件
正如刚才提到的地址,我们实现了一个点的更好的效率,例如:
key.isdown KeyDown =
keyleft = key.left
如果使用我们(keydown(keyleft))
附录:我们测试了关键代码和键值常量的效率,没有太大差别。
12)math.floor()方法和int()
这个问题已经在flashkit论坛讨论。试验表明,旧的int的方法更有效。我们的测试结果也反映了这一。
13)表达式求值和括号语法
我们没有发现显著的差异,而不是如前所述,旧的表达式求值在括号中没有优势。
VaR MC = eval(_root。mymc 我)
VaR MC = _root {mymc 我}
近16 / / MC效率)享受同样的循环:asbroadcaster周期差异
结论
我们从这些测试的结果中发现,我们可以大大提高脚本对于不同需求和不同代码的执行效率,尽管我们列出了许多优化代码的方法,但我们需要自己测试。有很多实验,我们可以来我们的论坛。
哦:
最后,翻译,我也学到了很多好东西,和其他人可以去官方gotoAndPlay,也可以来我的博客!
在第一章AS3的评论
来源:John Grden Blog
1。这个除法用乘法代替(当除数可以转换成一个有限的数)。例如,n =数值* 0.5;比var更好;数字=值 2;快。但是差别不是很大。只有当需要大量计算时,如3D引擎的差异,就更明显。
2。位操作
第三章黑羽经验:Actionscript代码优化
来源:Kingda的博客
本文不仅论述了优化代码,但不深入到面向对象的设计水平。一些在Flash8帮助提到的代码优化原则的解释和说明。
指南来自flash8的帮助下,我取得了一些解释。
1。避免多次从循环调用函数。
小函数的内容包含在循环中,使效果更好,小函数的生命周期短,有利于资源的释放,特别是在一个大周期内。
2。尽可能使用本地函数。
本机函数运行比用户更快的定义函数。原生功能是多功能(内在)在闪光,如hitTest(),你不必写一个相似的自己。
三.不要使用对象类型太多。
数据类型注释应该是精确的,这样才能提高性能。只有在没有合适的替代数据类型时才使用对象类型,而且还易于管理代码,并且总是知道对象的类型和功能。
同时,它也有利于编译器编译时优化。
4。避免使用eval()函数或数据访问操作。
一般来说,它是更有效的建立一个本地参考的只有一次。不要使用eval,例如,当转换为影片剪辑_droptarget。
5。给array.length在循环的开始一个变量,尤其是大环。
Array.length是一个变量(如VaR iLength:数)在循环的开始,这是作为一个条件,而不是使用myarr.length本身。
的原因,在环,iLength是数变,将登记和更有效的比访问数组和变长。例如,可以使用
无功fontarr:数组textfield.getfontlist();
无功arraylen:数量= fontarr.length;
对于(var i:数量= 0;i < arraylen;我){
微量(fontarr {我});
}
而不是:
无功fontarr:数组textfield.getfontlist();
对于(var i:数量= 0;i < fontarr.length;我){
微量(fontarr {我});
}
6。注意循环的优化和重复动作的优化。
Flash播放器需要花费大量的时间来处理回路(如循环使用setInterval()函数)。
7。当局部变量足够时,不要使用全局变量。类静态变量也不太有用。
全局变量是开发人员的噩梦,如果我们真的需要全局变量,我建议使用单例设计模式进行管理。
8。在声明变量时,添加var关键字。
这是编译器让编译器知道变量类型并优化编译。
黑羽添加:对关键词要谨慎使用。
它不赞成使用关键字作为自己的方法和属性名称,除非您确认后续开发不使用相同的事件名和属性名。
但是你怎么知道Flash使用了多少隐藏关键字呢太多 uff01for例子,类名,无效,刷新,mouseover等不常用的关键词,最好的方法是使用下肢编辑器编写代码,这凸显了所有发表和未发表的关键词。
而且,由于可以重复常用的事件名称,如启动、加载等,给代码带来不必要的修改和麻烦。
9。对于涉及调用绘图资源的函数,请尽可能地再次判断和调用。
在绘图资源调用中,所有更改、位置更改、删除MC、组件和其他函数的创建都涉及到,在许多情况下,尝试逻辑地判断变量或对象的属性,并在必要时调用这些函数。这样可以节省更多的计算资源。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。