FlashSWF程序性能优化-学习笔记.docx_第1页
FlashSWF程序性能优化-学习笔记.docx_第2页
FlashSWF程序性能优化-学习笔记.docx_第3页
FlashSWF程序性能优化-学习笔记.docx_第4页
FlashSWF程序性能优化-学习笔记.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Flash SWF程序性能优化唐胜凯 2012-04-10 23:11目录1.代码优化11.1. Vector类与Array类11.2. 新的绘图API11.3. 处理像素的新方法11.4. 事件捕获和冒泡21.5. 其他22.资源优化22.1. 配置文件压缩下载22.2. 将矢量图形平滑处理22.3. 采用正确的图片压缩方式32.4. 采用轻量级的UI组件32.5. 用位图替代矢量图形32.6. 位图缓存cacheAsBitmap33.内存优化43.1. 选择适当的显示对象43.2. 重复利用游戏元素43.3. 释放内存43.4. 冻结和解冻对象44. 渲染优化54.1. 重绘区域选项54.2. 选择适合你的游戏渲染引擎54.3. 其它55. 更多的优化65.1. 优化网络通信及数据交互65.2. 优化音视频69. 监测游戏性能的工具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+) coordinatesi = Math.random()*1024; trace(getTimer() - started); / output: 107var coordinates:Vector. = new Vector.(); var started:Number = getTimer(); for (var i:int = 0; i 300000; i+) coordinatesi = Math.random()*1024; trace(getTimer() - started); / output: 72尽可能尝试使用 Vector 对象 API,因为它们的运行速度可能更快。以后就改用Vector,实在不行时,再用Array。1.2. 新的绘图APIFlash 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 -1) )对文本基本搜索和提取时,使用 String 类方法而非正则表达式。使用位移运算符()替换乘除运算符(,/)。尝试各种代码编写方式 ,反复对比,找到适合自己游戏的优化。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(); / output: 236 trace(getSize(new Sprite(); / 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. 重绘区域选项可使用 filer.showRedrawRegions() 方法以编程方式启用此选项。在游戏开发过程中常用重绘区域,找到隐藏的垃圾元件。4.2. 选择适合你的游戏渲染引擎Sprite vs BitmapDataDraw vs CopyPixel位图数据作为游戏元件效率会明显高于Sprite及MovieClip。CopyPixel方法速度远大于Draw。对于需要旋转的游戏元件,预先旋转位图并缓存,再CopyPixel4.3. 其它尽可能避免使用 alpha 属性。使用位图缓存和 opaqueBackground 属性可提高文本渲染性能。借助GPU:Stage3D5. 更多的优化5.1. 优化网络通信及数据交互5.2. 优化音视频9. 监测游戏性能的工具 Stats 类 /p/mrdoo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论