zoukankan      html  css  js  c++  java
  • Flash游戏优化技巧

    一、Flash游戏中ActionScript代码优化

    1、脚本运行速度的检测

    var started:Number = getTimer();

    ……

    执行代码

    ……

    var runTime=getTimer() - started;

    2、充分运用Flash Player新功能

    ·Vector类与Array类;

    ·新的绘图API

    ·处理像素的新方法;

    ·事件捕获和冒泡;

    ·其他

    3Vector类与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、其他

    ·利用mouseEnabledmouseChildren属性禁用鼠标交互;

    ·对于TextField,使用appendText()方法,而不要使用+=运算符;

    ·将重复使用的变量定义在循环之外;

    ·尽可能避免使用中括号[]运算符;

    ·对while循环使用相反的顺序(while(--i>-1{}

    ·对文本基本搜索和提取时,使用String类方法而非正则表达式;

    ·使用位移运算符(<<,>>)替换乘除运算符(*,/

    ···········

     

    二、Flash游戏中的图像优化

    1、将矢量图形平滑处理

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

    注意:简化矢量图形的复杂路径可以大大提高游戏的平均帧速率

    2、采用正确的图片压缩方式

    注意Fireworks可以用PNG8格式高效的压缩带Alpha通道的图片(此功能PS暂不支持)

    3、采用轻量级的UI组件

    注意:大量使用UI组件是隐形的效率杀手;采用传统的buttonSprite等代替某些组件;

     

    4、用位图替代矢量图形

    ·将滤镜特效在图片处理过程中添加

    ·创建合适大小的位图

    ·从Flash8开始,引入了cacheAsBitmap功能

    注意:对自身无动画的MC进行位图缓存;更改对象的xy属性不会导致重新生成缓存位图;旋转、缩放对象或更改其alpha值的行为都将重新生成缓存的位图,从而降底性能;AIRPackager 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

    注意:AS3delete仅是删除动态对象的动态属性;在将对象的引用设置为null之前,先确保正确地停用对象;如对象用作事件侦听器,先removeEventListener();清除BitmapData对象时,先调用dispose()方法;Flash Player 10.1AIR 1.5.2以上版本,disposeXML()新方法;

    4、冻结和解冻对象

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

    注意:使用Event.REMOVED_FROM_STAGEEvent.ADDED_TO_STAGE事件正确冻结和解冻对象;Flash Player 10Loader类新方法unloadAndStop(),通过此方法,可以卸载SWF文件、自动冻结加载的SWF文件中的每个对象并强制运行垃圾回收器。

     

    四、Flash游戏中的渲染优化

    1、重绘区域选项

    找到“谁偷吃了你的奶酪”,可以使用flash.profiler.showRedrawRegions()方法以编程方式启用此选项。

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

    2、选择适合你的游戏渲染引擎

    Sprite vs BitmapData

    Draw vs CopyPixel

    ……

    注意:位图数据作为游戏元件效率会明显高于SpriteMovieClipCopyPixel方法速度远大于Draw ;对于需要旋转的游戏元件,预先旋转位图并缓存,再CopyPixel

    3、其它

    尽可能避免使用alpha属性;

    使用位图缓存和opaqueBackground属性;

    GPU

     

    五、其它优化

    优化网络通信及数据交互;

    优化音视频;

    ……

     

    六、监测游戏性能的工具

    ·Stats类:http://code.google.com/p/mrdoob/wiki/stats

    ·PerformanceTest类:

    http://www.gskinner.com/blog/archives/2009/04/as3_performance.html

    ·Flash Builder探查器

    ·FlexPMDhttp://opensource.adobe.com/wiki/display/flexpmd/FlexPMD

  • 相关阅读:
    写简单游戏,学编程语言-python篇
    RSS阅读器python实现概述
    python简易爬虫来实现自动图片下载
    SQL SERVER 2008 R2 SP3 发布
    动态规划问题总结 (转载)
    typedef with const 联合的说明
    C++ 初始化列表
    C++de构造函数
    排序算法温习
    java中读取properties配置文件用例
  • 原文地址:https://www.cnblogs.com/keng333/p/2439074.html
Copyright © 2011-2022 走看看