您的当前位置:首页正文

Flash_SWF程序性能风格) (2)

2020-11-20 来源:爱go旅游网
Flash SWF程序性能优化

唐胜凯 2012-04-10 23:11

目录

1.代码优化 ....................................................................................................................... 2

1.1. Vector类与Array类............................................................................................. 2

1.2. 新的绘图API ...................................................................................................... 2 1.3. 处理像素的新方法.............................................................................................. 2 1.4. 事件捕获和冒泡 ................................................................................................. 2 1.5. 其他................................................................................................................... 3 2.资源优化 ....................................................................................................................... 3

2.1. 配置文件压缩下载.............................................................................................. 3 2.2. 将矢量图形平滑处理 .......................................................................................... 3 2.3. 采用正确的图片压缩方式 ................................................................................... 3 2.4. 采用轻量级的UI组件......................................................................................... 4 2.5. 用位图替代矢量图形 .......................................................................................... 4 2.6. 位图缓存cacheAsBitmap ..................................................................................... 4 3.内存优化 ....................................................................................................................... 4

3.1. 选择适当的显示对象 .......................................................................................... 4 3.2. 重复利用游戏元素.............................................................................................. 5 3.3. 释放内存............................................................................................................ 5 3.4. 冻结和解冻对象 ................................................................................................. 5 4. 渲染优化 ..................................................................................................................... 5

4.1. 重绘区域选项..................................................................................................... 5

4.2. 选择适合你的游戏渲染引擎................................................................................ 6 4.3. 其它................................................................................................................... 6 5. 更多的优化.................................................................................................................. 6

5.1. 优化网络通信及数据交互 ................................................................................... 6

5.2. 优化音视频 ........................................................................................................ 6 9. 监测游戏性能的工具.................................................................................................... 6

某种优化技巧,可能既优化了CPU也优化了内存,也可能优化了CPU而增加了内存,或优化了内存而增加了CPU。要具体情况具体分析。

1.代码优化

1.1. Vector类与Array类

Flash Player 10 引入了 Vector 类, 其读写访问速度比 Array 类更快。 var coordinates:Array = new Array(); var started:Number = getTimer(); for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 107 var coordinates:Vector. = new Vector.(); var started:Number = getTimer();  for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 72 尽可能尝试使用 Vector 对象 API,因为它们的运行速度可能更快。 以后就改用Vector,实在不行时,再用Array。

1.2. 新的绘图API

Flash Player 10 提供了一个新的绘图 API,使用它可获得更好的代码执行性能。此新绘图 API 包含下列方法:drawPath()、drawGraphicsData()、drawTriangles()。属于Graphics类。 此新的 API 不提供显示性能改进是大法官户籍空了阿萨德风格化上的人发帖工业化, 但可以大大减少必须编写的代码行数。代码行越少, ActionScript 执行性能越好。

1.3. 处理像素的新方法

Flash Player 10 引入了快速绘制及读取像素的方式:setVector()、getVector()。 如果使用setPixel() 或 setPixel32(),请使用 lock() 和 unlock()。 减少遍历像素的次数。

配合Vector类来提高像素处理速度。

1.4. 事件捕获和冒泡

ActionScript 3.0 中的事件模型引入了事件捕获和事件冒泡的概念。 for ( var i:int = 0; i< MAX_NUM; i++ ) { …… // 侦听鼠标点击事件,给每个敌人添加 enemy.addEventListener ( MouseEvent.CLICK, onEnemyClick ); }  …… //只给敌人容器添加,因为事件可以冒泡 container.addEventListener ( MouseEvent.CLICK, onEnemyClick, true ); for ( var i:int = 0; i< MAX_NUM; i++ ) { …… } 使用事件捕获和冒泡可以最大程度地减少事件处理。 1.5. 其他

利用mouseEnabled 和 mouseChildren 属性禁用鼠标交互。 对于TextField ,使用 appendText() 方法, 而不要使用 += 运算符。 将重复使用的变量定义在循环之外。 尽可能避免使用中括号[]运算符。

2.资源优化

2.1. 配置文件压缩下载 2.2. 将矢量图形平滑处理

使用Flash Professional或Illustrator 减少矢量图形的控制点。

简化矢量图形的复杂路径可以大大提高游戏的平均帧速率。其实是降低了CPU占用。

2.3. 采用正确的图片压缩方式

Fireworks 可以用PNG8格式高效的压缩带Alpha通道的图片。

2.4. 采用轻量级的UI组件

大量使用UI组件是隐形的效率杀手。 采用传统的button,Sprite等代替某些组件。

2.5. 用位图替代矢量图形

将滤镜特效在图片处理过程中添加。 创建合适大小的位图。

2.6. 位图缓存cacheAsBitmap

对自身无动画的MC进行位图缓存。

更改对象的 x 和 y 属性不会导致重新生成缓存位图。

旋转、缩放对象或更改其 alpha 值的行为都将重新生成缓存的位图,从而降低性能。 AIR 或 Packager for iPhone Preview 中提供的DisplayObject.cacheAsBitmapMatrix 属性没有上述限制。

3.内存优化

3.1. 选择适当的显示对象

不同显示对象的内存使用量(字节数): trace(getSize(new Shape())); trace(getSize(new Sprite()));

// output: 236 // output: 412

trace(getSize(new MovieClip())); // output: 440 对于非交互式简单形状,使用 Shape 对象; 对于不需要时间轴的交互式对象,使用 Sprite 对象; 对于使用时间轴的动画,使用 MovieClip 对象;

将新文本引擎用于只读文本,将TextField对象用于输入文本;

3.2. 重复利用游戏元素

尽可能重复使用对象而不重新创建对象。包括MovieClip、SWF、声音、位图、视频等。 使用对象池,重复使用对象而非设置为null。无法回收则不再回收,重复利用,挺好!

3.3. 释放内存

删除对对象的所有引用以确保触发垃圾回收:Object = null。这种方式比较费劲,而且不保证成功。被删除对象在外部的所有引用一定要被删除干净,才能被系统当成垃圾回收处理掉。有一个引用没有删除,则垃圾无法回收。不如对象池重用好。

父对象内部的子对象被外部其他对象引用了,会导致此子对象不能被删除,子对象不能被删除又会导致了父对象不能被删除;

AS3中delete仅是删除动态对象的动态属性;

在将对象的引用设置为null之前,先确保正确地停用对象; 如对象用作事件侦听器,先removeEventListener(); 清除BitmapData对象时, 先调用 dispose()方法;

Flash Player 10.1和AIR 1.5.2以上版本,disposeXML()新方法;

3.4. 冻结和解冻对象

只有确保对象没有被使用,才能有效的进行内存回收。

使用 Event.REMOVED_FROM_STAGE 和Event.ADDED_TO_STAGE 事件正确冻结和解冻对象。

Flash Player 10的Loader 类新方法unloadAndStop() 通过此方法,可以卸载 SWF 文件、自动冻结加载的 SWF文件中的 每个对象并强制运行垃圾回收器。

4. 渲染优化

4.1. 重绘区域选项

可使用 flash.profiler.showRedrawRegions() 方法以编程方式启用此选项。

在游戏开发过程中常用重绘区域,找到隐藏的垃圾元件。

4.2. 选择适合你的游戏渲染引擎

Sprite vs BitmapData Draw vs CopyPixel

位图数据作为游戏元件效率会明显高于Sprite及MovieClip。 CopyPixel方法速度远大于Draw。

对于需要旋转的游戏元件,预先旋转位图并缓存,再CopyPixel

4.3. 其它

尽可能避免使用 alpha 属性。

使用位图缓存和 opaqueBackground 属性可提高文本渲染性能。 借助GPU:Stage3D

5. 更多的优化

5.1. 优化网络通信及数据交互 5.2. 优化音视频

9. 监测游戏性能的工具

• Stats 类

http://code.google.com/p/mrdoob/wiki/stats

• PerformanceTest 类

http:// www.234title.com/blog/archives/2009/04/as3_performance.html • Flash Builder 探查器 • FlexPMD

http://opensource.adobe.com/wiki/display/flexpmd/FlexPMD

因篇幅问题不能全部显示,请点此查看更多更全内容