Actionscript优化指南

2008-04-02 11:05:01来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  

在这篇文章中,我们将讨论多种优化 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变量仅仅在花括号对中才有“生命”,个人认为没有系统学过编程的人容易出错的一个地方:

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

  }


  

这样一来任何的变量均被定义为了局部变量,他们能够更快地被播放器调用。这一点在函数大量(10,000次)循环运行时显得尤为重要!当一个函数调用结束的时候,相应的局部变量都会被销毁,并且释放出他们占有的系统资源。

  

onEnterFrame 事件

  

onEnterFrame事件对于游戏研发者而言是很有用的,他使得我们能够快速、反复地按照预设帧频(fps)运行一段程式。回想在Flash5的时代,这(onEnterFrame实时监控)是一种很流行的技术,用这样的事件来控制机器游戏对手的逻辑,又或我们能够在每一个子弹上配置这样的事件来监测子弹的碰撞。

  

实际上,我们并不推荐给过多的MoveClip添加这样的事件,因为这样做会导致“无头绪码(spaghetti code)”的出现,并且容易导致程式效率明显降低。

  

大多数情况下,用单独一个onEnterFrame事件就能够解决问题了:用这一个主循环来执行您所需要的操作。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: FlashMX中暗藏小游戏

下一篇: Actionscript中的本地连接