Java 复杂路径冲突
Java Complex Path Collision
我在随机生成的地牢迷宫游戏中一直遇到碰撞问题。所以基本上,我的游戏随机生成房间和它们之间的路径。但是,我检测碰撞的方式是通过矩形:
public Rectangle getBounds(){
return new Rectangle(x, y, w, h);
}
由于我使用矩形来检测碰撞,每当我试图离开房间并进入通道时,房间的碰撞矩形都会阻止我这样做。
Me Me(blue box) 试图进入绿色路径(但我不能因为房间的碰撞矩形),红色框是房间,蓝色轮廓是碰撞框。
有没有办法解决这个问题,或者有更好的方法来检测碰撞?
您需要将碰撞代码更改为不对房间使用 Rectangle
,而是使用 Line
。 java 中的 Rectangle
s 方便地具有 Line
s 与 Rectangle
s 的碰撞检测方法。
Line2D.interects(Rectangle r)
如果您的播放器具有矩形碰撞遮罩,这就是它在播放器中的样子 class
。 注意: 示例中缺少代码,例如更新玩家面具和 List<Line2D.Float> walls
关卡 class 的声明。(或任何您拥有的代码)
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;
}
我在随机生成的地牢迷宫游戏中一直遇到碰撞问题。所以基本上,我的游戏随机生成房间和它们之间的路径。但是,我检测碰撞的方式是通过矩形:
public Rectangle getBounds(){
return new Rectangle(x, y, w, h);
}
由于我使用矩形来检测碰撞,每当我试图离开房间并进入通道时,房间的碰撞矩形都会阻止我这样做。
有没有办法解决这个问题,或者有更好的方法来检测碰撞?
您需要将碰撞代码更改为不对房间使用 Rectangle
,而是使用 Line
。 java 中的 Rectangle
s 方便地具有 Line
s 与 Rectangle
s 的碰撞检测方法。
Line2D.interects(Rectangle r)
如果您的播放器具有矩形碰撞遮罩,这就是它在播放器中的样子 class
。 注意: 示例中缺少代码,例如更新玩家面具和 List<Line2D.Float> walls
关卡 class 的声明。(或任何您拥有的代码)
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;
}