Actionscript优化指南
2008-04-02 11:05:01来源:互联网 阅读 ()
在这篇文章中,我们将讨论多种优化 Actionscript 代码的方法.
此外我们也针对一些典型的游戏代码进行了系列测试,来最大限度的发掘、提高Flash播放器的性能。
代码优化简介
在本文中,我们将向您展示一些通过技术手段得到了优化的flash小游戏。代码优化之所以重要是因为他能帮您节约flash播放器的资源,还能让您的游戏在不同的硬件环境下运行得更加稳定。本文主要讨论基于flashplayer6.0的一些问题,连同如何通过可行的技术手段去解决他们!
随着flashplayer7.0的发布,一些技术问题已得到解决了,而且性能大体地有所提高,然而在写本文之时,flashplayer6.0仍然有着广泛的应用。所以我们还是主要集中在6.0这个版本上。-aw猜测:外国买盗版的很少,所以很多人可能都来不及使用7.0,尤其是那些非职业的flash设计者。 何时进行优化 对现有程式进行优化的过程,有时十分的冗长和困难,这和原始代码的非优化程度有关,所以在投入大量时间进行代码优化之前,最重要的是要估计出要在什么地方对代码做出修改或替换。 一个游戏代码的最重要的部分就是主循环体,通常情况下该循环体要在flash的每一帧上执行,并控制游戏中的角色属性和重要的数据参数。而对于主循环体以外的部分,也可能是次要循环部分,同样要注意是给其否分配了过多的资源,而没有分配给那些更需要资源的核心部分。 通过积累在各处节约出来的时间(可能每处仅仅是几个毫秒),您会明显发现自己的swf运行得更加稳定,并且游戏感也大大加强。 简洁和高效的代码 书写出十分简洁、能够再次调用的代码(有时可能是面向对象的)是一项精细的工作,但这需要多年的编程经验。对于OOP(object oriented programming, 面向对象的程式设计),有些场合根本利用不到他的优势,这使得他显得十分奢侈。 在有限的资源条件下(可能是flash播放器的原因),通过更先进的方法,像刚刚提到的OOP,就可能反而导致令人不满意的结果。 我们并不是说OOP对游戏编程不好,只是在某些场合他显得过于奢侈和多余。毕竟有时候“传统的方法”却能得到更好的结果。 大体而言,用OOP是比较好的,因为他让代码维护更加简单。但在后文中,您会看到有时为了充分发挥flashplayer性能,而不采用OOP技术。例如:处理快速滚动或计算十分复杂的数学问题。 基本的优化 一提及代码优化,我们马上会联想到执行速度的改进,而很少去考虑系统资源的分配。这是因为当今,即使是将被淘汰的电脑,都有足够的内存来运行我们大部分的flash游戏(128M的内存足以满足大多数情况的需要,况且,512M的内存是当今新电脑的基本配置) 变量 在各种重要的代码优化手段中,有这么一条:在定义局部变量的时候,一定要用关键字var来定义,因为在Flash播放器中,局部变量的运行速度更快,而且在他们的作用域外是不耗占系统资源的。 aw附:var变量仅仅在花括号对中才有“生命”,个人认为没有系统学过编程的人容易出错的一个地方: 一段非优化代码: 这段代码中,并未声明函数体内的那些变量(那些仅仅在函数内使用的变量)为局部变量,这使得这些变量被播放器调用的速度更慢,并且在函数执行完毕的时候仍然耗占系统资源。 下面列出的是经过改进的同样功能的代码: 这样一来任何的变量均被定义为了局部变量,他们能够更快地被播放器调用。这一点在函数大量(10,000次)循环运行时显得尤为重要!当一个函数调用结束的时候,相应的局部变量都会被销毁,并且释放出他们占有的系统资源。 onEnterFrame 事件 onEnterFrame事件对于游戏研发者而言是很有用的,他使得我们能够快速、反复地按照预设帧频(fps)运行一段程式。回想在Flash5的时代,这(onEnterFrame实时监控)是一种很流行的技术,用这样的事件来控制机器游戏对手的逻辑,又或我们能够在每一个子弹上配置这样的事件来监测子弹的碰撞。 实际上,我们并不推荐给过多的MoveClip添加这样的事件,因为这样做会导致“无头绪码(spaghetti code)”的出现,并且容易导致程式效率明显降低。 大多数情况下,用单独一个onEnterFrame事件就能够解决问题了:用这一个主循环来执行您所需要的操作。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
awMC.onLoad = function(){
var aw = 1;
}
awMC.onEnterFrame = function(){
//不存在aw这个变量
}
function doSomething()
{
mx = 100
my = 100
ar = new Array()
for (y=0; y < my; y )
{
for (x=0; x < mx; x )
{
i = (y * mx) x
arr[i] = i
}
}
return arr
}
function doSomething()
{
var mx = 100
var my = 100
var ar = new Array()
for (var y=0; y < my; y )
{
for (var x=0; x < mx; x )
{
var i = (y * mx) x
arr[i] = i
}
}
return arr
}
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: FlashMX中暗藏小游戏
下一篇: Actionscript中的本地连接
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash