您当前的位置: 首页 >  游戏

_waylau

暂无认证

  • 6浏览

    0关注

    275博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Flash游戏开发性能优化

_waylau 发布时间:2011-09-30 14:15:00 ,浏览量:6

(1)数据存储方式的选择 使用如下几种存取数据方式进行存取100万次运算,所花时间依次为(单位为毫秒,ms):如下几种存取数据方式100万次存取运算效率依次为:  类定义中的属性(如public、private类属性) 135 毫秒 1. Point类对象 140毫秒 2. Rectangle类对象(x等属性) 140ms 3. Array类对象 270ms 4. Object类对象 500 ms 5. 动态类动态属性 550ms 6. Rectangle类对象(left等属性) 700ms 7. 自定义类getter/setter 1000ms 8. 自定义类Function 1000ms 最快的是第一类,速度是Array的两倍,Object的四倍,getter/setter的约八倍。存取坐标要用Point和Rectangle,比Array快的多。 Object和动态类效率较低,一般情况下请尽量使用密封类。 (2)场景中的MovieClip或Sprite在清除之前一定要用removeEventListener把上面所有的事件清除掉,这样系统才会gc掉。 (3)使用cacheAsBitmap进行位图缓存,对图形颜色多,元素多的加快CPU的处理速度。 (4)位图在运算速度上很快,但是在尺寸上变得很大,而矢量图虽然尺寸很小,但是在图形渲染上很占CPU资源,所以要选择尽量色差小,颜色简单的图形用矢量来做。大量复杂的图形可用位图代替。 (5)资源的压缩,矢量图中线段数量也决定了图形渲染的快慢。可以采用flash软件自带的修改->形状->优化,减少图形中的线条的数量。 (6)尽量采用低级运算和内部方法 用unit()或int()代替取整运算Math.floor()和Math.ceil()。 比如var test:uint = uint(1.5);要比var test:Number = Math.floor(1.5);快; 而var test:uint = uint(1.5)+1;要比var test:Number = Math.ceil(1.5);也快。 如果是Math.floor(),还可以用位运算(>>0)来代替。 比如var test:uint =1.5>>0,比unit()或int()更快。用乘-1来代替Math.abs()方法。比如var nn:Number = -23;var test:Number= nn < 0 ? nn * -1 : nn;要比var nn:Number = -23;var test:Number = Math.abs(nn);快。当然还有更多的优化计算的方法。一般来说,低级运算要比高级运算速度;内部方法比调用其他方法速度快。 (7)在各种重要的代码优化手段中,有这么一条:在定义局部变量的时候,一定要用关键字var来定义,因为在Flash播放器中,局部变量的运行速度更快,而且在他们的作用域外是不占用系统资源的。 (8)在编写游戏时尽量不要把帧频设得太高,太高的帧频会导致CPU计算量加大。 (9)我们常用的关键字:for in 可以代替其它的循环语句。 (10)不要过多使用 Object 类型。数据类型注释应力求精确,这样可以提高性能。只有在没有适当的备选数据类型时,才使用 Object 类型。同时也便于代码管理,时刻知道对象的类型和作用。同时也有利于编译器编译时优化 (11)对于类型是MovieClip等需要绘图的对像,能重复用的就重复用,比如删除一个对像后如果重新使用它,先判断if(mc == null)存不存在,存在就不再给它赋一个新的对像了。 (12):善用对像池功能,在制作大型游戏时,往往会用到很多一模一样的影片剪辑,把从场景中删除的对像放入对像池中,当需要用到对像时,可以从池中直接创建新的对像来保证内存的占用。 (13)Lib注册机制,在制作大型的游戏时,往往是多人分工,一个游戏维护起来也相当复杂,这时可以采用Lib文件的注册方式添加游戏的事件管理。统一由一个时间片,或一个侦听池管理。减少了游戏运行时的负担,也起到了多人维护的作用。 (14)使 ActionScript 尽量简单。 限制使用的循环数和每个循环包含的代码数。 关闭trace。运行期间不断打印会影响速度。 在AS中尽量不用或少用除法运算符。如果可能的话,用乘法代替除法,比如: var b = a / 4;用下面的乘法运算来替代:var b = a * 0.25; 尽量避免字符串和数组处理过长的数据,因为这会非常消耗 CPU。
关注
打赏
1651845987
查看更多评论
立即登录/注册

微信扫码登录

0.0649s