灵岩侠客 / flashas3.0 / AS3中onEnterFrame事件

分享

   

AS3中onEnterFrame事件

2011-09-11  灵岩侠客
AS3中onEnterFrame事件
2011-09-08 11:59

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

     实际上,我们并不推荐给过多的MoveClip添加这样的事件,因为这样做会导致无头绪码(spaghetticode)”的出现,并且容易导致程序效率明显降低。大多数情况下,用单独一个onEnterFrame事件就可以解决问题了:用这一个主循环来执行你所需要的操作。另一个简单的办法是设置一个合适的帧频:要知道帧频越高,CPU资源就越紧张。在帧频为25-35(fps)之间时,onEnterFrame足以很好地执行较复杂代码,哪怕你的计算机配置较低。因此,在没有特殊要求的场合,我们不推荐使用高于60(fps)的帧频。矢量图与位图在处理图形前,我们一定要做出正确的选择。
       Flash
能对矢量图和位图进行完美的兼容,然而矢量图和位图在播放器中的表现实质却完全不同。在用到矢 量图的时候,我们要尽可能简化它们的形状,去除多余的端点。这样做将大大降低播放器用于呈现矢量图所要进行的计算量。另一个重要方面在于线条的运用,尽量 减少和避免冗陈的线条结构,因为它们会直接影响到flash的播放效率。
       
当某个实例透明度小于100时,也会对播放速率造成影响,所以如果你发现自己的Flash播放速率过慢,就去挑出这些透明的实例来吧!那么,如果真的需要呈现比较复杂的场景时,你就最好考虑使用位图实现。虽然Flash在对位图的渲染效率上并不是最优越的(比如和Flash ”Director比起来),但丰富的视觉内容呈现只能靠位图(与位图同复杂度的矢量图形渲染速率非常低)了,这也是很多基于区块的游戏中广泛采用像素 图作为背景的原因。
       
顺便要提到的是,Flash虽然对GIF,JPGPNG都有所支持,但是渲染速度上PNG还是占有绝对优势,所以我们建议flash中的位图都尽可能采用PNG格式。影片剪辑(MovieClip)的可视性[下面将MovieClip简称为mc]您可能会经常碰到这样一种情况:有大量不可见/屏幕外的mc等待出场(比如游戏中屏幕外的地图、人物等等)

     要知道,播放器仍然要消耗一定的资源来处理这些不可见/屏幕外的mc,哪怕他们是单帧,非播放的状态。最好的解决办法之一是给这些mc一个空白帧,当他们不出现在屏幕上时,你能用gotoAndStop()语句跳转到这一帧,从而减少播放器对资源的需求。请务必记住,这种情况下,简单的设置可见度属性为不可见( _visible =false)是无效的,播放器将继续按照这些mc所停留或播放的帧的复杂度来分配资源。数组数组在各种需要记录数据的应用程序和游戏中都被广泛的使用。一个典型的例子就是基于区块的Flash游戏,在这样一类的游戏中,地图有时被存放成形如arr[y][x]的二维数组。虽然这是一种很常见的方 法,但是如果用一维数组的话,却能提高程序的运行效率。另一个重要的方法来提高数组效率是在数组遍历的时候使用for in 循环来代替传统的 for 或者while循环语法。
例如:一段代码如下
for (var i in arr)

{
      if (arr[i] > 50)
     {
     // 进行某些操作
     }

}
它的执行速度明显高于这一段代码:
for (var i=0i < 10000i++)

{
     if (arr[i] > 50)
    {
    // 进行某些操作
    }

}

   前者的效率比后者提高了30%,这个数字在你的游戏要逐帧执行这一段代码的时候显得更加宝贵!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>