返回首页

Flash游戏优化技巧大全

时间:2011-04-07 22:30来源:betway必威官网www.etsupport.net 编辑:麦田守望者

一、Flash游戏中ActionScript代码优化
1、脚本运行速度的检测
var started:Number = getTimer();
……
执行代码
……
var runTime=getTimer() - started;
2、充分运用Flash Player新功能
·Vector类与Array类;
·新的绘图API
·处理像素的新方法;
·事件捕获和冒泡;
·其他
3、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.<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
注意:尽可能尝试使用Vector对象API,因为它们的运行速度可能更快。
4、新的绘图API
Flash Player 10提供了一个新的绘图API,使用它可获得更好的代码执行性能。
此新绘图API包含下列方法:
·drawPath()
·drawGraphicsData()
·drawTriangles()
注意:此新的API不提供显示性能改进,但可以大大减少必须编写的代码行数。代码行越少,AS执行性能越好。
5、处理像素的新方法
Flash Player 10中引入了快速绘制及读取像素的方式
·setVector()
·getVector()
注意:好果使用setPixel()或setPixel32,请使用lock()和unlock();减少遍历像素的次数;配合Vector类来提高像素处理速度;
6、事件捕获和冒泡
ActionScript3.0中的事件模型引入了事件捕获和事件冒泡的概念。
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++ ) { …… }
注意:使用事件捕获和冒泡可以最大程度地减少事件处理。
7、其他
·利用mouseEnabled和mouseChildren属性禁用鼠标交互;
·对于TextField,使用appendText()方法,而不要使用+=运算符;
·将重复使用的变量定义在循环之外;
·尽可能避免使用中括号[]运算符;
·对while循环使用相反的顺序(while(--i>-1{})
·对文本基本搜索和提取时,使用String类方法而非正则表达式;
·使用位移运算符(<<,>>)替换乘除运算符(*,/)
···········

二、Flash游戏中的图像优化
1、将矢量图形平滑处理
如使用Flash Professional 或Illustrator减少矢量图形的控制点。
注意:简化矢量图形的复杂路径可以大大提高游戏的平均帧速率
2、采用正确的图片压缩方式
注意Fireworks可以用PNG8格式高效的压缩带Alpha通道的图片(此功能PS暂不支持)
3、采用轻量级的UI组件
注意:大量使用UI组件是隐形的效率杀手;采用传统的button,Sprite等代替某些组件;

4、用位图替代矢量图形
·将滤镜特效在图片处理过程中添加
·创建合适大小的位图
·从Flash8开始,引入了cacheAsBitmap功能
注意:对自身无动画的MC进行位图缓存;更改对象的x和y属性不会导致重新生成缓存位图;旋转、缩放对象或更改其alpha值的行为都将重新生成缓存的位图,从而降底性能;AIR或Packager for iPhone中提供的DisplayObject.cacheAsBitmapMartix属性没有上述限制。

三、Flash游戏中的内存优化
1、选择适当的显示对象
不同显示对象的内存使用量(字节数)
trace(getSize(new Shape()));
// output: 236
trace(getSize(new Sprite()));
// output: 412
trace(getSize(new MovieClip()));
// output: 440
注意:对于非交互式简单形状,使用Shape对象;对于不需要时间轴的交互式对象,使用Sprite对象;对于使用时间轴的动画,使用MovieClip对象;将新文本引擎用于只读文本,将TextField对象用于输入文本。
2、重复利用游戏元素
注意:尽可能重复使用对象而不是重新创建对象;使用对象池,重复使用对象而非设置为null;
3、释放内存
删除对对象的所有引用以确保触发垃圾回收
Object=null
注意:AS3中delete仅是删除动态对象的动态属性;在将对象的引用设置为null之前,先确保正确地停用对象;如对象用作事件侦听器,先removeEventListener();清除BitmapData对象时,先调用dispose()方法;Flash Player 10.1和AIR 1.5.2以上版本,disposeXML()新方法;
4、冻结和解冻对象
只有确保对象没有被使用,才能有效的进行内存回收
注意:使用Event.REMOVED_FROM_STAGE和Event.ADDED_TO_STAGE事件正确冻结和解冻对象;Flash Player 10的Loader类新方法unloadAndStop(),通过此方法,可以卸载SWF文件、自动冻结加载的SWF文件中的每个对象并强制运行垃圾回收器。

四、Flash游戏中的渲染优化
1、重绘区域选项
找到“谁偷吃了你的奶酪”,可以使用flash.profiler.showRedrawRegions()方法以编程方式启用此选项。
注意:在游戏开发过程中常用重绘区域,找到隐藏的垃圾元件。
2、选择适合你的游戏渲染引擎
Sprite vs BitmapData
Draw vs CopyPixel
……
注意:位图数据作为游戏元件效率会明显高于Sprite及MovieClip;CopyPixel方法速度远大于Draw ;对于需要旋转的游戏元件,预先旋转位图并缓存,再CopyPixel;
3、其它
尽可能避免使用alpha属性;
使用位图缓存和opaqueBackground属性;
GPU;

五、其它优化
优化网络通信及数据交互;
优化音视频;
……

顶一下
(2)
100%
踩一下
(0)
0%
标签(Tag):FLASH FLASH实例教程 flash实例 flash源码 ActionScript
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片