我在随机生成的地牢迷宫游戏中遇到碰撞时遇到了麻烦。因此,基本上,我的游戏会在它们之间随机生成房间和通路。但是,我检测碰撞的方式是通过矩形:
public Rectangle getBounds(){
return new Rectangle(x, y, w, h);
}
由于我使用矩形来检测碰撞,因此每当我尝试离开房间并进入通道时,房间的碰撞矩形都会阻止我这样做。Me Me(蓝色框)正尝试进入绿色通道(但由于房间的碰撞矩形而无法实现),红色框是房间,蓝色轮廓是碰撞盒。
我是否可以解决此问题,或者有更好的检测碰撞的方法?
您需要更改碰撞代码,以使房间不使用Rectangle
,而要使用Line
。 Java中的Rectangle
方便地具有Line
与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;
}