c++游戏碰撞检测怎么做?
用于碰撞检测算法的物体可能具有某种形状和复杂性,需要进行组合碰撞检测,即将复杂的物体处理成基本形状的组合,然后分别进行检测。
下面简单介绍一下两个基本形状碰撞时的处理。
1,矩形与矩形碰撞检测算法
一般的规则物体碰撞可以作为矩形碰撞来处理,实现的原理是检测两个矩形是否重叠。我们假设矩形1的参数为:左上角坐标为(x1,y1),宽度为w1,高度为h 1;矩形2的参数为:左上角坐标为(x2,y2),宽度为w2,高度为h2。
在检测中,在数学上可以处理为X和Y方向上中心点坐标的距离和宽度之间的关系。也就是说,在X方向上两个矩形的中心点之间的距离的绝对值小于或等于矩形宽度之和的一半,而在Y方向上的距离的绝对值小于或等于矩形高度之和的一半。下面是一个数学表达式:
x方向:|(x 1+w 1/2)–(x2+w2/2)| < |(w 1+w2)/2 |
y方向:|(y 1+h 1/2)–(y2+H2/2)| < |(h 1+H2)/2 |
在Java ME程序中,只需要将上述条件转换成代码即可。
但是矩形碰撞只是一个粗略的碰撞检测算法,因为很多实际物体可能不是一个规则的矩形。
我们来介绍一个圆形碰撞。
2.圆与圆的碰撞检测算法。
圆和圆的碰撞应该说是最简单的碰撞,因为在数学上,有一个公式可以计算出圆心的两个距离。那么条件就变成了:计算两个圆心的距离是否小于两个圆的半径之和。
假设圆1的左上角坐标为(x1,y1),半径为r1,圆2的左上角坐标为(x2,y2),半径为r2。
因为MIDP1.0中没有浮点数,浮点数的运算比较慢,所以我们对条件做一个简单的变换:将条件两边平方,这样就省去了平方根的运算步骤。
下面是一个数学表达式:
(x 1–x2)2+(y 1–y2)2 & lt;(r1 + r2)2
在Java ME程序中,只需要将上述条件转换成代码即可。
上面的介绍只是最基本的碰撞检测算法的实现,但是实际编程过程中遇到的碰撞检测问题要比这些复杂得多,还需要其他形式的检测,需要更深入的学习。