快速业务通道

J2ME游戏开发笔记整编版 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

J2ME游戏开发笔记整编版

时间:2011-01-13

-------------一般类问题--------------

1 J2ME中查表法使用三角函数

CLDC和MIDP都没有提供三角函数,而且CLDC1.0中也没有浮点数,所以我们的选择是查表。使用8位定点数的sin和cos表。下面是wtk自带demo中的代码,只提供了有限的几个角度,实际使用时根据需要细化角度值。

// sines of angles 0, 10, 20, 30, 40, 50, 60, 70, 80, 90,all *256    private static final int[] SINES =    { 0, 44, 88, 128, 165, 196, 222, 241, 252, 256 };    // angle is in degrees/10, i.e. 0..36 for full circle    private static int sineTimes256(int angle)    {    angle %= 36;  // 360 degrees    if (angle <= 9)  // 0..90 degrees    {    return SINES[angle];    }    else if (angle <= 18)  // 90..180 degrees    {    return SINES[18-angle];    }    else if (angle <= 27)  // 180..270 degrees    {    return -SINES[angle-18];    }    else   // 270..360 degrees    {    return -SINES[36-angle];    }    }    // angle is in degrees/10, i.e. 0..36 for full circle    private static int cosineTimes256(int angle)    {    return sineTimes256(angle + 9);   // i.e. add 90 degrees    }    (2006.5 注:有一些算法可以生成三角函数值,这样只要在游戏载入时生成一下函数表即可,节省一些数据)    2 J2ME中使用随机数    产生0~n之间的随机数:    (ran.nextInt()>>>1)%n    或    (ran.nextInt()&0x7FFFFFFF)%n    产生-n~0之间的随机数:    (ran.nextInt() | 0x80000000 )%n

J2ME游戏开发笔记整编版(2)

时间:2011-01-13

3 尝试IO优化

正在开发的一个游戏,由于读地图的时候做了图片切割,所以速度比较慢。(在我开发上一个游戏的时候,读取地图时没有装载切割图片,速度非常快,看来IO操作的速度和createImage,drawImage相比是微不足道的)对于IO的优化也许根本不会明显的提高速度,但我还是试了一下。

分析了一下代码,在最初的代码中为了比较方便的读取各种类型的数据,使用DataInputStream套接InputStream。可是我仔细看了一下我读取得数据,居然都是byte,唯一的一个char也是被我用两个byte手工组装起来的。这下,DataInputStream看来是不需要了。于是我做了个实验,没改动之前读取地图耗时1242ms,将DataInputStream去掉直接使用InputStream耗时1065ms,虽然每次试验的结果都稍有不同,但大概还是节约了200ms左右。

还能再加快点吗?再观察一下代码,我发现数据是通过多次的read操作读取进来的。太过频繁的 io操作会不会降低速度呢?如果用一个字节数组作缓冲一次性将数据都读进来会不会快点?嗯,试一试才知道。但是我怎么知道一个流的大小呢? InputStream的avaliable方法总是返回-1啊!打开两次流,第一次先计算大小?对了,还有一个方法。直接将文件大小写到文件前面。地图文件是用自己的编辑器生成的,知道大小很容易。于是我在文件前面用两个byte纪录了文件的大小,先从流中读取2个byte,得到文件大小后,再用 read(byte[],int,int)方法将整个流读取到缓冲中。然后,我的所有数据操作都从缓冲中读取。好,试验一下,结果是:1154ms。阿? 慢了近100ms。事实证明了这个猜想是错误的。原因?也许只有了解KVM的机制才知道。

弄完速度的问题,我又觉得读取文件的try块太大了,因为是边读边处理数据,所以try块变得很大。try块太大会增加c

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号