可先参见游戏图片和视频
鸟哥,在论坛里承诺过,有空会把相关技术展现出来,今天有空就提提吧。这里不会提供完整代码,仅仅用于算法交流。我想到哪就写哪些吧,一个游戏,相关的东西也是很多的。 先提提cldc1.0吧。
一、浮点运算处理
cldc1.0要求我们在游戏开发中,不能使用浮点数,可是对于射击游戏,有很多运算要用到,那怎么办?下面会提到。至于为什么一定要用cldc1.0?那就和移植有关系了,当前主流用户用的是不支持cldc1.1浮点运算的手机,公司考虑到用户量,定位于cldc1.0,当然,目前绝大多数游戏定位都是cldc1.0的。这里再扯远一点,像有些做3d游戏的,如果用了自带的可选3d api,就要求一定要支持cldc1.1,那么用户定位就是稍高端一点机器用户了,覆盖面将减少很大一部分,像上百宝箱等因为都对移植机型数量有一定要求,决策确实需要慎重。
没有了浮点数,就没有sinx,cosx函数,没有了1/2=0.5,当运算时,j2me的做法都是先放大,后缩小。举例,如sin1(弧度制)=0.01745240....,先把(sin1 )* n算出来,再除于n,这样就不会丢失那么多精度。原理就是如此。
游戏中对sinx,cosx 采用角度制,放大陪数为2的14次方倍,用工具计算出0到90度的值放数组里,共91个值。至于为什么,有3点:
a 因为如果用了2的次方,就可以直接用移位做运算,严重提高速度!
b 这些值放大以后,还能在一个short类型里放得下,而不必用int,小2字节,91个值就相当于182字节。一个short类型16个位,放到2的15次方,一不小心就变负值了,不可,不可,所以选择2的14次方。
c 其他角度的sinx,cosx用这91个值做数学变换即可。
下面给出这方面的源码:
感兴趣的网友可以用源码研究:
//角度制
//取得结果后,把最终结果>>14
//如int a = 100; b = a * sin(1) >> 14;
public static int sin(int x)
{
int degree = (360 + x % 360) % 360;
if(degree >= 0 && degree <= 90)
{
return sins[degree];
}
else if(degree > 90 && degree <= 180)
{
return sins[180 - degree];
}
else if(degree > 180 && degree <= 270)
{
return -sins[degree - 180];
}
else
{
return -sins[360 - degree];
}
}
public static int cos(int x)
{
return sin(90 - x);
}
static short[] sins = new short[]
{
0,286,571,856,1143,1428,1712,1997,2280,2562,2844,3126,3406,3686,3963,
4240,4515,4790,5062,5334,5603,5872,6137,6401,6663,6923,7182,7438,7692,
7942,8192,8437,8681,8922,9161,9397,9630,9859,10087,10310,10531,10749,
10962,11173,11381,11585,11785,11983,12174,12365,12550,12732,12910,13084,
13254,13421,13582,13741,13893,14044,14188,14329,14465,14598,14725,14848,
14966,15081,15191,15296,15396,15491,15582,15668,15749,15825,15897,15964,
16025,16082,16134,16182,16225,16261,16293,16321,16344,16361,16374,
16380,16384
};
如果有用到上面代码的网友,请在注释里写上javaeye鸟哥,呵呵。
如有问题,欢迎提。谢谢
从下面的跟贴中,其实可以发现,是角度精确和内存大小问题,用byte可以搞定(下面有代码),用short也可以搞定,内存和精度其实就是个矛盾体,网友使用时,自己均衡考虑。
分享到:
相关推荐
鸟哥惠新晨,PHP
鸟哥SQL常用命令 鸟哥SQL常用命令 鸟哥SQL常用命令 鸟哥SQL常用命令
鸟哥的私房菜,还不错,看看吧,文件太大,分割成三个,2,3的链接是 http://download.csdn.net/source/387484 http://download.csdn.net/source/387487
鸟哥的 Linux 私房菜基础篇 和 服务器篇 第三版 还有sqlServer的pdf电子书
鸟哥的私房菜
鸟哥服务器架设
鸟哥linux服务篇,pdf资料,细说了linux服务器的架设。
鸟哥的linux,pdf高清版 鸟哥的linux,pdf高清版 鸟哥的linux,pdf高清版 鸟哥的linux,pdf高清版
鸟哥的私房菜。是嵌入式学习当中个人认为很好的一本电子书。
鸟哥的linux鸟哥的linux 私房菜 课后题答案
鸟哥linux服务器架设篇 mobi 鸟哥linux服务器架设篇 mobi
两本书合成在一起,基础版与服务器版,非常清晰,是学习linux系统的必选好书。
鸟哥的私房菜linux 关于linux初学者很好的教材
鸟哥linux私房菜,通俗易懂的入门文档
鸟哥教程linux,鸟哥教程linux,鸟哥教程linux,鸟哥教程linux,鸟哥教程linux
鸟哥的Linux 私房菜 基础学习篇.mobi,鸟哥的Linux 私房菜 基础学习篇.mobi