对
代码进行优化的最简单办法就是首先不要调用这些代码。这并不是说要删除这些代码,也许可以用其他办法来调用它们(后者事实减少对它的调用)。游戏的主循环 是游戏运行的最主要做的事情,应该更多地考虑是否可以不用或减少对属于这个区域内的代码的调用。在前一片文章中介绍了方法和内存评测工具的使用,但它们只 能帮助我们找出究竟是哪段代码降低了程序的运行速度,下面的内容是参考了其他资料整理出来的优化代码的方法。
一, 1, 对于电影来说,我们通过摄像头看到的都是完美的,而在拍摄现场我们看到的却是木头,泡沫和胶带。所以对于电影来说,感觉到就是真实。 游戏也一样,只需要处理游戏需要的东西。在游戏开发的各个方面这都是实用的。把精力集中在使游戏有趣和完美运行的问题上,始终只做需要做的而丢弃其他的部分。 2, 减少对象创建的总数量和频率,结果能够大大地提高游戏的性能。还必须小心在不经意的情况下产生 例如 这一句代码会在每次被调用的时候产生一个新的 3, 通常,在对游戏完成大量的优化工作以后,收获的将是一个大量时间耗费在屏幕绘图上的游戏。这是因为一个游戏的主要时耗大都集中在绘制图像的工作上(或其他的一些基本的绘图调用)。因此,如果一开始就可以避免绘制工作,那将是对游戏的很好的优化。 还有就是要减少屏幕绘制,循环检测屏幕图像是否在某个部分发生了改变,如果没有,就不要对那部分的屏幕进行更新。另一个方法就是增加绘制图像的尺寸来减少单独的绘制调用的次数。 4, 最好的,也是使用最多的高级优化是对游戏的算法方面。
二,低级优化 1, 我们已经知道,使用 2, 产生新的类会增加 3, 节省运算的一个好方法就是对数值进行预运算,从而无需再调用大开销的计算方法。一个很好的例子就是:主窗口画布的高度和宽度就是很好的 4, 在任何时候,只要可能,都应该使用数组而不是 Public final static int[ ] expandArray(int [] oldArray, int expandBy) { int [ ] newArray = new int [oldArray.length + expandBy]; System.arraycopy(oldArray, 0, newArray, 0, oldArray.length); Return newArray; } 任何时候,都应该尽量使用一维数组。访问二维数组变量的速度只有访问一维数组变量的一半。当然,仍然可以访问二维数组的对象,只是需要加入一点点计算。例如,与其使用这条语句: world[y][x] = 0; 不如下面这条语句运行的快: world[y*tilesWide + x] = 0; 这条语句通过行列的位置将数值转换成一维值,实现了对数组同一元素的访问。 5, 呵呵,尽管数组的访问比 6, 并不是所有 7, 1)异常处理非常缓慢,不要为一半的游戏逻辑使用异常,只用它们来报告真正的错误状态。 2)使用 3)尽可能避免使用 4)内嵌类的运行很慢,尽可能避免使用。 5)在完成一个引用的使用后将它设为 6)不要浪费时间来将一个对象初始化为 7)多思考新方法,这会使我们的大脑运转的更快。 8)如果可能,尽量使用 9)避免类型转换。 10)程序优化的时候要有所取舍,要多捉摸了。大家有什么好的建议?一起来壮大吧。 共同探讨:
附:关于j2me程序的调试 使用eclipseME+WTK2.1进行J2ME应用程序调试(debug)-- 引用mingjava的帖子。 选择windows->preferences->java->debug 不要选择suspend execution的前面两个选项,在debuger timeout选项中 第一个时间至少设置为15000ms 这样就可以调试了。
|