flash游戏优化技巧
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
Flash游戏中的图像优化
• 将矢量图形平滑处理
使用Flash Professional或Illustrator 减少矢量图形的控制点
优 化 前
优 化 后
简化矢量图形的复杂路径可以大大提高游戏的平均帧速率
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
21
Flash游戏中的内存优化及垃圾回收
• 重复利用游戏元素
尽可能重复使用对象而不是重新创建对象 使用对象池,重复使用对象而非设置为null
10
Flash游戏中的ActionScript代码优化
• 处理像素的新方法
Flash Player 10 中引入的了快速绘制及读取像素的方式
• setVector() • getVector()
• 如果使用setPixel() 或 setPixel32(),请使用 lock() 和 unlock() • 减少遍历像素的次数 • 配合Vector类来提高像素处理速度
• drawPath() • drawGraphicsData() • drawTriangles()
此新的 API 不提供显示性能改进, 但可以大大减少必须编写的代码行数。 代码行越少, ActionScript 执行性能越好。
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Flash 游戏优化技巧
黄竣 平台技术经理 junhuang@adobe.com www.fans8.com
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
22
Flash游戏中的内存优化及垃圾回收
• 释放内存
删除对对象的所有引用以确保触发垃圾回收
Object = null
AS3中delete仅是删除动态对象的动态属性 在将对象的引用设置为null之前,先确保正确地停用对象 如对象用作事件侦听器,先removeEventListener() 清除BitmapData对象时, 先调用 dispose()方法 Flash Player 10.1 AIR 1.5.2 disposeXML()
16
Flash游戏中的图像优化
• 采用正确的图片压缩方式
Fireworks 可以用PNG8格式高效的压缩带Alpha通道的图片
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
17
Flash游戏中的图像优化
使用事件捕获和冒泡可以最大程度地减少事件处理
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
12
Flash游戏中的ActionScript代码优化
• 其他…
利用mouseEnabled 和 mouseChildren 属性禁用鼠标交互 对于TextField ,使用 appendText() 方法, 而不要使用 += 运算符 将重复使用的变量定义在循环之外 尽可能避免使用中括号[]运算符 对 while 循环使用相反的顺序 ( while (--i > -1) { } ) 对文本基本搜索和提取时,使用 String 类方法而非正则表达式 使用位移运算符(<<,>>)替换乘除运算符(*,/) ……
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
13
Flash游戏中的ActionScript代码优化
• 其他…
• 尝试各种代码编写方式 ,反复对比,找到适合自己游戏的优化
不同方式的碰撞判断比较
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
19
Flash游戏中的内存优化
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
• 采用轻量级的UI组件
UI组
隐
杀 组
传统 button Sprite
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
18
Flash游戏中的图像优化
• 用位图替代矢量图形
将滤镜特效在图片处理过程中添加 创建合适大小的位图 从Flash8开始,引入了cacheAsBitmap功能 对自身无动画的MC进行位图缓存 更改对象的 x 和 y 属性不会导致重新生成缓存位图 旋转、缩放对象或更改其 alpha 值的行为 都将重新生成缓存的位图,从而降低性能 AIR 或 Packager for iPhone Preview 中提供的 DisplayObject.cacheAsBitmapMatrix 属性没有上述限制
for ( var i:int = 0; i< MAX_NUM; i++ ) { …… // Listen to the MouseEvent.CLICKevent enemy.addEventListener ( MouseEvent.CLICK, onEnemyClick ); } …… container.addEventListener ( MouseEvent.CLICK, onEnemyClick, true ); for ( var i:int = 0; i< MAX_NUM; i++ ) { …… }
Flash Player 10 Loader 类新方法unloadAndStop() 通过此方法,可以卸载 SWF 文件、自动冻结加载的 SWF 每个对象并强制运行垃圾回收器。
4
帧频 CPU 内存
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
5
帧频不够? CPU消耗太高? 内存占用过多?
代码优化 图像优化 内存优化 显示优化 ……
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
尽可能尝试使用 Vector 对象 API,因为它们的运行速度可能更快
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
9
Flash游戏中的ActionScript代码优化
• 新的绘图API
Flash Player 10 提供了一个新的绘图 API,使用它可获得更好的代码执行性能。 此新绘图 API 包含下列方法:
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
11
Flash游戏中的ActionScript代码优化
• 事件捕获和冒泡
ActionScript 3.0 中的事件模型引入了事件捕获和事件冒泡的概念。
2
Smoothing Game Play = Better Game
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
3
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
var started:Number = getTimer(); …… 执行代码 …… var runTime=getTimer() - started;
• 新的绘图API • 处理像素的新方法 • 事件捕获和冒泡 • 其他
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
14
Flash游戏中的图像优化
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
20
Flash游戏中的内存优化及垃圾回收
• 选择适当的显示对象
不同显示对象的内存使用量(ຫໍສະໝຸດ Baidu节数)
trace(getSize(new Shape())); // output: 236 trace(getSize(new Sprite())); // output: 412 trace(getSize(new MovieClip())); // output: 440 对于非交互式简单形状,使用 Shape 对象 对于不需要时间轴的交互式对象,使用 Sprite 对象 对于使用时间轴的动画,使用 MovieClip 对象 将新文本引擎用于只读文本,将TextField对象用于输入文本
var coordinates:Vector.<Number> = new Vector.<Number>(); var started:Number = getTimer(); for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 72
8
Flash游戏中的ActionScript代码优化
• 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
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
23
Flash游戏中的内存优化及垃圾回收
• 冻结和解冻对象
只有确保对象没有被使用,才能有效的进行内存回收
Event.REMOVED_FROM_STAGE Event.ADDED_TO_STAGE 事件正确冻结和解冻对象
6
Flash游戏中ActionScript代码优化
© 2010 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
7
Flash游戏中的ActionScript代码优化
脚本运行速度的检测
充分运用Flash Player新功能 • Vector类与Array类