Java 2D游戏Hitbox检测和圆角

我正在与Java,swing和没有框架的简单的2D游戏。 我有一个矩形玩家,用户可以四处移动。 在地图上,玩家不应该经历的障碍很less。 我为玩家制作了一个新的Rectangle对象,并为每个障碍物设置了边界。 但我不确定这是否是正确的做法。 它的作品,但玩家的动作并不真正的用户友好。 如果玩家想要通过两个障碍物,他们必须在完美的坐标上通过。

用一个Rectangle对象来检查玩家和障碍物之间的交叉点是否是一个好主意,还是应该以另一种方式来做呢?

现在我的第二个问题:
我想用同样的hitboxreplace矩形的hitbox,但是圆角,所以玩家可以更容易的通过。

我的游戏启用了hitboxes
这是游戏看起来像启用了hitboxes。

检查玩家和障碍物是否相交的代码:

for (Player p : this.getPlayerArray()) { Rectangle recPlayer = p.playerBounds(); for (Obstacle kiste : obstacleArray) { Rectangle recKiste = kiste.obstBounds(); if (recPlayer.intersects(recKiste)) { p.setX(100); //Not actual code here } } } 

返回玩家/障碍物的hitbox的函数:

 public Rectangle obstBounds() { return new Rectangle(this.getX(), this.getY(), image.getImage().getWidth(null), image.getImage().getHeight(null)); } 

这就是为什么你可能不想使用圆角矩形来解决你的问题:

嗯

现在,陷入这样的边缘,如果不是更多的话,可能会让人感到沮丧,而不是完全不能移动。

我想你可能想在移动时使用一些错误更正。 我的意思是,当你的角色移动时,让我们说,对,如果有碰撞,马上就不要退后! 相反,将矩形上下移动5个像素(每次1个像素),看是否可以避开墙壁。 其他箭头也一样。 向上移动时,如果发生碰撞,请检查是否可以通过左右移动来避免碰撞。

我已经发布了一个类似于此的答案,您可能会发现有帮助:

如何检测碰撞检测的完美通道? //参见方法1

在这里你可以做的第二件事情,在你的很多瓦片游戏中很常见,每移动一个瓦片就移动一个瓦片。 所以如果你点击右箭头,然后在角色只移动几个像素后释放它,角色将继续移动,直到它位于下一个图块的中心。

希望这可以帮助! 🙂

据说,你应该每个问题发一个post。

您可以使用圆形碰撞器而不是矩形碰撞器。 通过实验设置圆的半径。

如果你关心极端的精确度,你也可以实现两者的结合,但是一个圆应该足够你的目的。

将您的播放器边界或对象边界设置为比实际对象less几个像素。 我通常每程约5次。 这样你就有了一点余地。