我在随机生成的地下城迷宫游戏中遇到了碰撞问题。所以基本上,我的游戏随机生成它们之间的房间和路径。但是,我检测碰撞的方式是通过矩形:
public Rectangle getBounds(){
return new Rectangle(x, y, w, h);
}
由于我使用矩形来检测碰撞,每当我试图离开房间并进入通道时,房间的碰撞矩形阻止我这样做。 我(蓝盒子)试图进入绿色通道(但我不能因为房间的碰撞矩形),红色的盒子是房间,蓝色的轮廓是碰撞盒。
有没有办法让我解决这个问题,或者更好的方法来检测碰撞?
答案 0 :(得分:1)
您需要将碰撞代码更改为不将Rectangle
用于房间,而是使用Line
s。 java中的Rectangle
方便地为Line
s的Rectangle
提供了碰撞检测方法。
Line2D.interects(Rectangle r)
如果你的玩家有一个矩形的碰撞面具,这就是它在玩家class
中的样子。 注意:代码在示例中缺失,例如在级别类中更新玩家掩码和List<Line2D.Float> walls
声明。(或者您拥有它的任何地方)
Rectangle mask = new Rectangle.Float(x, y, width, height);
protected boolean wallCollision() {
for (Line2D.Float l : level.walls) {
if (l.intersects(this.mask)
return true;
}
return false;
}