我们在游戏开发中少不了会遇到各种各样的碰撞,例如飞机射击类游戏、坦克大战游戏、推箱子游戏......并且会频繁地去处理这些碰撞,这也是游戏开发中的一种基本算法。常见的碰撞算法有矩形碰撞、像素碰撞、圆形碰撞,其中矩形碰撞使用得最多。
两个矩形发生碰撞的情况有如下几种:
此外还有一种容易被忽视的碰撞情况(重叠):
第1种方法:
我们可以通过判断一个矩形的4个顶点是否在另外一个矩形的内部来完成。下面简单地创建一个Rectangle类:
public class Rectangle {
int x, y, w, h;// 分别是x和y坐标,宽度和高度,构成一个矩形
public Rectangle() {
}
public Rectangle(int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getRectangleWidth() {
return w;
}
public int getRectangleHeight() {
return h;
}
}
检测是否发生碰撞的部分代码如下:
public boolean isColliding(int px, int py) {
// px和py分别传入的是x坐标和y坐标
// 等号的情况是考虑重叠的情况
// 传入的坐标只要满足下面所有条件就表示传入的坐标在当前矩形范围内,返回true也就是碰撞了
if (px >=