FLASH/ActionScript 性能优化

14 篇文章 0 订阅
6 篇文章 0 订阅

一. 图形方面的优化

1. 减少同时在屏幕上物体的个数

2. 尽量减少屏幕需要重画的范围。

3. 尽量避免全屏滚动

4. 保持帧数在16-20, 每一帧都连续,比将帧数设置的很高,但是每一帧的计算超过帧时间,让人感觉更舒服。

5. 如果一个物体不需要显示,尽量将他从屏幕上删除,而不是将他设置成不可见。因为即使不可见的物体也会引起屏幕的重画。

6. 尽量用小一点的分辨率

二. 脚本方面的优化

1. 在循环中尽量使用局部变量, 因为可以做寄存器优化

2. 不断的做 Profile

 

 

==============

由于大多数移动设备在处理速度和内存方面都有一定的限制性,因此在开发适用于移动电话中使用的 Flash Lite 内容的 ActionScript 时,请遵循以下原则:

  • 使 ActionScript 尽量简单。
  • 限制使用的循环数和每个循环包含的代码数。
  • 当不再需要基于帧的循环时,应当立即停止该循环。
  • 尽量避免字符串和数组处理,因为这对 CPU 的消耗很大。
  • 始终尝试直接访问属性,而不要使用 ActionScript getter 和 setter 方法,因为与其它方法调用相比,这两种方法需要更高的开销。
  • 巧妙并更为具体地管理事件。在调用侦听器之前利用一些条件来检查侦听器是否存在(不为

     

    null

    ),以此来使事件侦听器数组更加简洁。

  • 不再需要变量时,请删除变量或将变量设置为

     

    null

    。这样做可以标记数据,以便进行垃圾回收。删除变量有助于在运行期间优化内存使用情况,因为从 SWF 文件中删除了不需要的资源。删除变量比将变量设置为

    null

    更好。

    有关垃圾回收和内存管理技术的更多信息,请参见管理应用程序的内存

  • 在进行垃圾回收前,通过调用

     

    removeListener()

    从对象中显式删除侦听器。

  • 如果动态调用函数并传递固定的一组参数,则请使用

     

    call()

    ,而不要使用

    apply()

  • 尽量使命名空间(如路径)简短以节省启动时间。包中的每个级别均会被编译为一个

     

    IF

    语句,并导致一个新的

    Object()

    调用,因此路径中的级别较少可以节省时间。

    例如,具有

    com.xxx.yyy.aaa.bbb.ccc.functionName()

    级别的路径会使一个对象针对

    com

    xxx

    yyy

    aaa

    bbb

    ccc

    被实例化。有些 Flash 开发人员使用预处理器软件,在编译 SWF 之前,将路径简化为一个唯一标识符,如

    58923409876.functionName()

  • 如果应用程序由多个使用相同 ActionScript 类的 SWF 文件组成,则可以在编译过程中从选择的 SWF 文件中排除这些类。这样有助于缩短应用程序的下载时间和降低运行时内存要求。有关更多信息,请参见从编译过程中排除类
  • 避免使用

     

    Object.watch()

    Object.unwatch()

    ,因为对象属性的每次更改都要求播放器确定是否必须发送更改通知。

  • 如果在时间轴中的关键帧上执行的 ActionScript 代码需要 1 秒以上方可完成,则应考虑分割该代码,使其在多个关键帧上执行。
  • 在发布 SWF 文件时从代码中删除

     

    trace()

    语句。为此,在"发布设置"对话框的"Flash"选项卡上,选择"省略跟踪动作"复选框。

  • 继承会增加方法调用的数量,而且会使用更多的内存:包括所需全部功能的类在运行时要比从超类继承某些功能的类更加有效。因此,您可能需要在类的扩展性和代码有效性间做出一定的设计取舍。
  • 当一个 SWF 文件加载另一个包含自定义 ActionScript 类(例如

     

    foo.bar.CustomClass

    )的 SWF 文件,然后再卸载该 SWF 文件时,该类定义仍将保留在内存中。为了节省内存,应显式删除已卸载 SWF 文件中的所有自定义类。可以使用

    delete

    语句,然后指定完全限定类名,如下面的示例所示:

    delete foo.bar.CustomClass

     

  • 限制全局变量的使用,因为如果删除了定义全局变量的影片剪辑,这些全局变量就不会被垃圾回收。
  • 避免使用标准用户界面组件(在 Flash Professional 8 的"组件"面板中提供)。这些组件设计用于在桌面计算机上运行,并未针对在移动设备上运行而优化。
  • 尽量避免深层嵌套函数。
  • 避免引用不存在的变量、对象或函数。与桌面版本的 Flash Player 相比,Flash Lite 2.0 在查找对不存在的变量的引用时速度非常缓慢,这会显著影响应用程序的性能。




记录一下,有些和其它语言或场景优化比较相似,不过独有一些和VM的东西。
摘抄的地图的相关优化
1. 地图上重复用到的物件一定要转成元件(图形和影片剪辑都可)
2. 地图上一定不要出现不是元件的图形,不管它是组还是其他的什么
3. 地图上如果有动画,一定要少,桢数要少,动作也要小。如果有几组动画,一定要错开关键桢。这样在视觉和性能上都可以上一个档次。
4. 元件也存在优化,里面如果有多个重复的图形也是要分散开多个元件,举例树而言,里面的叶子,一般我都是制作成组的,但在最后定稿的时候,最好把他们打散到 一层里。
5. 透明(alpha),渐变都是flash性能的杀手,更不要提柔化填充边缘了
6. 节奏,我们现在是采用的24桢/秒,如果你上述的方法都用过了,那就要试着把你的节奏变慢,原来是一分种重复一次的小动画,那你就要做成2分钟的,或更 慢。还不行就直接拿掉。
7. 元件在地图上面不要缩放和扩大,虽然矢量的优点就是可以随意的扩大的缩放,但大家做成元件时就应该考虑到大小的问题,要修改的话,不要在舞台上操作,应该 进到元件里面修改,虽然只是一个双击的问题,但对结果的影响却不是一般的大。
8. 图形优化,这是一个还没验证的话题,所以大家慎用。由于在画图的过程中,会产生一些多余的你无意产生的节点,当然,图形越复杂越会多,而节点的庞杂就是导 致flash运行慢的罪魁祸首,所以,你可以试一下菜单栏的修改-形状-优化,但一定不要把参数调高,甚至可以把参数调成无,它也会帮你优化。我一般是不 用的,因为。。。。。麻烦。而且还没有测试,结果未知。
9. 以上都是说的矢量的,如果你的文件里有位图的话,那就另当别论了,最开始我们的游戏全是位图,不会出现什么性能慢的问题,但文件就很大,用矢量才会出现我 上面讲的优化问题。

 

推荐论坛:

http://www.adobe.com/devnet.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值