J2ME下的手机游戏的优化

 

手机游戏的优化
手机游戏设计中由于设备性能限制,可能出现资源不足的情况,这就需要优化实现技术,游戏的优化有很多的技巧,在我做的这个游戏中使用了以下方法:
   关于异常的处理
Java 中提供了 try/catch 来方便用户捕捉异常,进行异常处理。但是如果使用不当,也会给 J2ME 程序的性能带来影响,所以在程序的编写过程中,应注意以下两点:如果可以使用 if while 等逻辑语句来处理,就尽量不使用异常处理;对于必须要进行异常的处理时,尽可能的重用已经存在的异常对象。
   图片优化
J2ME 的内存杀手无疑图片莫属,一张 3kb png 图片可以占用 20 kb 的内存。对于图片的优化在我做的这个游戏中使用了几种方法:将所有图片存储为 8 位色,而不是 16 位或 24 位;也可以将同一规格的图片合并,做成一张长条的图片,并在导入时使用时 creatImage ()函数裁剪。如原来为 130*50 的图片,取其左面的一部分
playerSprite= new Sprite(Image.createImage( "/res/MyPlaneFrames.png"), 65, 50);
 
   代码优化
Java 的垃圾回收器并非是实时的,从某种角度来讲在 J2ME 上所有垃圾必须由手工释放,因为简单类型外所有对象都必须显示置空。例如在游戏程序中对于生命面包类对象 bread 的声明:
waterLayer= new TiledLayer(50,200,Image.createImage( "/res/backg.png"),32,32);
该段代码是先创建了对象然后再进行赋值操作,也就是说在这期间有两个对象同时存在,这就很可能会产生溢出,同时这样做也会妨碍垃圾回收器的工作,较好的编程如下:
     waterLayer= null;
     waterLayer=newTiledLayer(50,200,Image.createImage( "/res/backg.png"),32,32);
把所有对象的初始化放在构造函数中是理所当然的,大多数人通常的做法是把当前逻辑所要用到的资源全部初始化完毕。但是很大一部分的内存溢出都是发生在构造函数中,内存使用的高峰期都是在构造函数中,避开这个高峰期就能有效地防止溢出,所以程序汇总对于变量的初始化尽量在第一次调用时进行。
Java 代码访问成员变量比局部变量所需的时间更长。其原因和两种变量的内存如何访问有关。实际上,这意味着在性能关键的时候,你应该使用局部变量而不是成员变量。例如有一个循环重复访问的成员变量,那么,应该考虑在开始循环之前把这个成员变量存储到一个局部变量中。下面是游戏中在一个循环中访问成员变量:
         可以看到, bigPlane 对象的成员变量在循环中被访问了 MAX_BP 次。这段代码的一种快速优化包是把 bigPlane[i].geyY 设置给一个局部变量,然后在循环中访问这个局部变量,可以在 for 循环之前定义局部变量 String a[] ,然后在循环中用 a[] 代替 bigPlane[i].getY
for( int i=0;i<MAX_BP;i++){
                                 if(bigPlane[i].getY()>downLimit-bigPlane[i].getHeight())
                                  bigPlane[i].setVisible( false);};
   减少内存的使用
       在很多时候,手机内存的限制比设备的有限处理能力的限制要显著的多,因此尽可能地减少手机游戏的内存使用显得及其重要,可以利用一些实际的开发方法来减少一个游戏 MIDlet 所需的内存。一般情况下,对于减少内存的使用所用的方法是使用对象时重用对象。
         对象 重用就是重新使用已有的对象,而不是创建一个新的对象。这种方法只有在需要重复使用相同类的对象 时才奏效。对象重用避免了不必要的内存分配。例如如果创建一个对象然后终止使用它, java 垃圾回收器最终会释放分配给它的内存。如果需要另一个相同的类型的对象并且创建了新的,对象所需要的内存会自动重新分配,那么,可以把最初的对象重新初始化而不再创建一个新的,这要也就重用了对象。
 转载至:http://gaochaojs.blog.51cto.com/812546/187893

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值