您要做的是为两个游戏矩形的每个边缘创建边界矩形。由于矩形有 4 条边,因此矩形有 4 个边界矩形。
警察有 4 个边界矩形,克星有 4 个边界矩形。这意味着您必须intersects
在双for
循环中进行 16 次测试。
当其中一项intersects
测试返回 true 时,您可以确定 cop 矩形的哪个边缘以及您的 nemesis 矩形的哪个边缘发生了碰撞。
这里有一些代码来说明如何创建边界矩形。如果需要,您可以使它们宽于 3 个像素。
public List<BoundingRectangle> createBoundingRectangles(Rectangle r) {
List<BoundingRectangle> list = new ArrayList<BoundingRectangle>();
int brWidth = 3;
// Create left rectangle
Rectangle left = new Rectangle(r.x, r.y, brWidth, r.height);
list.add(new BoundingRectangle(left, "left"));
// Create top rectangle
Rectangle top = new Rectangle(r.x, r.y, r.width, brWidth);
list.add(new BoundingRectangle(top, "top"));
// Create right rectangle
Rectangle right = new Rectangle(r.x + r.width - brWidth, r.y, brWidth,
r.height);
list.add(new BoundingRectangle(right, "right"));
// Create bottom rectangle
Rectangle bottom = new Rectangle(r.x, r.y + r.height - brWidth,
r.width, brWidth);
list.add(new BoundingRectangle(bottom, "bottom"));
return list;
}
public class BoundingRectangle {
private Rectangle rectangle;
private String position;
public BoundingRectangle(Rectangle rectangle, String position) {
this.rectangle = rectangle;
this.position = position;
}
public Rectangle getRectangle() {
return rectangle;
}
public String getPosition() {
return position;
}
public boolean intersects(Rectangle r) {
return rectangle.intersects(r);
}
}