首页 > 其他分享 >Flash游戏开发性能优化

Flash游戏开发性能优化

时间:2023-01-15 10:36:15浏览次数:40  
标签:游戏 nn Flash Number test var 优化 Math 运算


(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。

标签:游戏,nn,Flash,Number,test,var,优化,Math,运算
From: https://blog.51cto.com/u_9427273/6008296

相关文章

  • 分治优化
    概述分治优化常常在DP的转移有某种单向单调性时使用,通过类似整体二分的结构,确保每个决策点只在一条链上出现,从而加速转移。一般这种分治优化也有对应的二分栈形式,区别......
  • 常数优化
    数据类型显而易见地,越小的型的运算越快。大体来讲longlong的常数比int大一倍,但__int128的比longlong大一倍不止(因为没有128位机,故__int128的实现是“......
  • mysql索引优化-01
    1.1索引是什么?  mysql官方对于索引的定义:可以帮助mysql高效的获取数据的数据结构。  mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据......
  • mysql like性能优化
    网上很多优化like的方法,无非下面几种,抄来抄去的。我用213万条数据,每条数据50个字段左右(用的真实的生产环境的mysql数据库,和真实的生产环境的数据),做了性能测试;时间记录的次数......
  • 线段树优化建图学习笔记
    使用场景:单点向区间,区间向单点或区间向区间建边。实现原理:用线段树的一个节点管辖一段图上区间的顶点。实现步骤:将原图中的顶点拆点(理论上,实际代码中不需要),出点和入点......
  • 《安富莱嵌入式周报》第299期:IAR发布嵌入式软开发基础问题PDF,树莓派单片机运行Verilog
    往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1xW4y137bv 1、I......
  • 【Redis实战专题】「性能监控系列」全方位探索Redis的性能监控以及优化指南
    Redis基本简介Redis是一个开源(BSD许可)、内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合等数据类型。内置复......
  • 如何通过物联网网关感知工业设备故障,优化设备维护体验?
    传统的工业生产中,设备维护一直存在效率低下的问题。传感的设备管理模式无法实时感知设备运行状态,往往在设备故障停机之后才联系工程师进行维护,严重影响生产效益和订单交付;对......
  • 适合编程初学者的开源项目:小游戏2048(鸿蒙ArkTS版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • 【Elastic Search】优化检索
    查询(query)与过滤(filter)的区别 如下为检索优化方案(部分内容有重复)https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.ht......