在Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(百搜技术)
html
在Java ME游戏开发中,常常须要进行碰撞检测算法的实现,例如判断前面是否有障碍以及判断子弹是否击中飞机,都是检测两个物体是否发生碰撞,而后根据检测的结果经过碰撞检测算法作出不一样的处理。 算法
进行碰撞检测算法的物体可能有些的形状和复杂,这些须要进行组合碰撞检测,就是将复杂的物体处理成一个一个的基本形状的组合,而后分别进行不一样的检测。 编程
下面简单介绍一下两种最基本的形状进行碰撞的时候进行的处理。 学习
一、矩形和矩形进行碰撞检测算法 spa
通常规则的物体碰撞均可以处理成矩形碰撞,实现的原理就是检测两个矩形是否重叠。咱们假设矩形1的参数是:左上角的坐标是(x1,y1),宽度是w1,高度是h1;矩形2的参数是:左上角的坐标是(x2,y2),宽度是w2,高度是h2。 htm
在检测时,数学上能够处理成比较中心点的坐标在x和y方向上的距离和宽度的关系。即两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一,同时y方向的距离的绝对值小于等于矩形高度和的二分之一。下面是数学表达式: 游戏
x方向:| (x1 + w1 / 2) – (x2 + w2/2) | < |(w1 + w2) / 2|
y方向:| (y1 + h1 / 2) – (y2 + h2/2) | < |(h1 + h2) / 2| 游戏开发
在Java ME程序中,只须要将上面的条件转换成代码就能够实现了。 开发
可是矩形碰撞只是一种比较粗糙的碰撞检测算法,由于不少实际的物体可能不是一个规则的矩形。 get
下面介绍一下圆形碰撞。
二、圆形和圆形的碰撞检测算法
圆形和圆形的碰撞应该说是一种最简单的碰撞,由于在数学上对于两个圆形是否发生重叠,有计算两个圆心之间的距离的公式。那么条件就变为:计算两个圆心之间的距离是否小于两个圆的半径和。
假设圆形1的左上角坐标是(x1,y1),半径是r1,圆形2的左上角的坐标是(x2,y2),半径是r2。
由于MIDP1.0中没有浮点数,并且浮点数的运算比较慢,因此咱们将条件作一个简单的变换:对于条件的两边都进行平方,这样就去掉了开方的运算步骤。
下面是数学表达式:
(x1 – x2)2 + (y1 – y2)2 < (r1 + r2)2
在Java ME程序中,只须要将上面的条件转换成代码就能够了。
上面介绍的只是最基本的碰撞检测算法的实现,而实际的编程过程当中遇到的碰撞检测问题要比这些复杂不少,还须要其余形式的检测,还须要进行更加深刻的学习。