J2ME中的基础碰撞检测算法
作者:陈跃峰
出自:http://blog.csdn.net/mailbomb
在游戏中,经常需要进行碰撞检测的实现,例如判断前面是否有障碍以及判断子弹是否击中飞机,都是检测两个物体是否发生碰撞,然后根据检测的结果做出不同的处理。
进行碰撞检测的物体可能有些的形状和复杂,这些需要进行组合碰撞检测,就是将复杂的物体处理成一个一个的基本形状的组合,然后分别进行不同的检测。
下面简单介绍一下两种最基本的形状进行碰撞的时候进行的处理。
1、矩形和矩形进行碰撞
一般规则的物体碰撞都可以处理成矩形碰撞,实现的原理就是检测两个矩形是否重叠。我们假设矩形1的参数是:左上角的坐标是(x1,y1),宽度是w1,高度是h1;矩形2的参数是:左上角的坐标是(x2,y2),宽度是w2,高度是h2。
在检测时,数学上可以处理成比较中心点的坐标在x和y方向上的距离和宽度的关系。即两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一,同时y方向的距离的绝对值小于等于矩形高度和的二分之一。下面是数学表达式:
x方向: | (x1 + w1 / 2) – (x2 + w2/2) | < |(w1 + w2) / 2|
y方向: | (y1 + h1 / 2) – (y2 + h2/2) | < |(h1 + h2) / 2|
在程序中,只需要将上面的条件转换成代码就可以实现了。
但是矩形碰撞只是一种比较粗糙的碰撞检测方法,因为很多实际的物体可能不是一个规则的矩形。
下面介绍一下圆形碰撞。
2、圆形和圆形的碰撞
圆形和圆形的碰撞应该说是一种最简单的碰撞,因为在数学上对于两个圆形是否发生重叠,有计算两个圆心之间的距离的公式。那么条件就变为:计算两个圆心之间的距离是否小于两个圆的半径和。
假设圆形1的左上角坐标是(x1,y1),半径是r1,圆形2的左上角的坐标是(x2,y2),半径是r2。
因为MIDP1.0中没有浮点数,而且浮点数的运算比较慢,所以我们将条件做一个简单的变换:对于条件的两边都进行平方,这样就去掉了开方的运算步骤。
下面是数学表达式:
(x1 – x2)2 + (y1 – y2)2 < (r1 + r2)2
在程序中,只需要将上面的条件转换成代码就可以了。
上面介绍的只是最基本的碰撞检测算法的实现,而实际的编程过程中遇到的碰撞检测问题要比这些复杂很多,还需要其他形式的检测,还需要进行更加深入的学习。
email:cqucyf@263.net
分享到:
相关推荐
J2ME中的基础碰撞检测算法浅析 文档
j2me透明泡泡碰撞小程序,有小小BUG,不影响运行。其中碰撞响应算法希望有高手改进。。作者QQ 359103820
J2me-Layermanager中使用游戏精灵与不同图层发生碰撞并检测
J2ME中碰撞检测代码详解!J2ME中碰撞检测代码详解!
J2ME中小球碰撞检测之后自动反弹,算法设计非常精巧
目前正在用j2me开发一个3D手游,所有的东西都做好了,但是由于积累不深,对于碰撞检测算法这块了解不多
J2ME中平方根算法!J2ME中平方根算法!J2ME中平方根算法!
j2me版A星寻路算法,适合RPG游戏中自动寻路...
J2ME 手机游戏,关于碰撞检测的教学用代码,供新手参考。
j2me版A*寻路算法,实例程序,能运行,内有详细的注释
能在j2me项目使用zip技术和gzip压缩解压
J2ME开发中彩色转灰度算法的应用 J2ME开发中彩色转灰度算法的应用
NULL 博文链接:https://gundumw100.iteye.com/blog/831540
J2me中文教程.pdf J2me中文教程.pdf
a* 寻路算法,j2me a* 寻路算法,j2me a* 寻路算法,j2me a* 寻路算法,j2me
Java FlyGeneral J2me碰撞检测游戏源码,得到图片以帧为单位的一个数据图片,碰撞检测 *@parameter ax ay aw ah 分别是a矩形的左顶点X Y坐标和矩形的 长和宽 *若返回真则为碰撞 *返回为假则为不碰撞 *@...
自己做的扫雷代码,图片自己画的,使用了递归算法,基本实现扫雷的功能,按5开方块,按1标志旗子。
j2me实现的des加密解密算法 j2me实现的des加密解密算法 j2me实现的des加密解密算法
J2ME中文教程 不错的学习资料,刚开始学习的可以参考下!