Java 游戏 Hitbox 检测和圆角

标签 java swing intersection rectangles

我正在使用 Java、swing 开发一款简单的 2D 游戏,没有框架。我有一个矩形播放器,用户可以四处移动。 map 上有一些玩家无法通过的障碍。我通过为玩家和每个障碍物及其边界制作一个新的矩形对象来做到这一点。但我不确定这是否是正确的方法。它有效,但玩家的 Action 并不是真正的用户友好。如果玩家想要通过两个障碍,他们必须在完美的坐标上才能通过。

用矩形对象检查玩家和障碍物之间的交点是个好主意还是我应该用其他方法来做?

第二个问题:
我想用相同的碰撞框替换矩形碰撞框,但圆角让玩家可以更轻松地通过。

My game with hitboxes enabled
这就是游戏启用碰撞箱后的样子。

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

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
            }
        }
}

返回玩家/障碍物碰撞箱的函数:

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

最佳答案

许多年前,我编写了一个 Khepera 模拟器,作为我本科生最后一年项目的一部分。我开始像你一样做碰撞检测,那是相交区域......我的主管让我注意到,因为我的机器人的形状是一个圆形,所以我可以检查机器人的中心是否在另一个形状内,如果是是不是发生了碰撞。

你的情况更简单,因为你在瓷砖上移动......所以你要么(如评论中所建议的那样)维护一组“移动/不移动”瓷砖并检查它,要么你只是检查您的播放器在或不在“禁止”矩形内,即障碍物。如果是,那么您必须将角色的位置重置为障碍物的“外部”(显然减去角色的边界框)

我强烈建议以拼贴方式进行操作:只允许上/下/左/右移动,并检查给定拼贴位置的“禁止”移动集。如果你真的想要运动的“自由”而不是圆圈(边界框/圆圈),因为它们很容易推理,很容易进行位置重置(在发生碰撞的情况下)并且非常适合你的情况(每个图 block 都可以包含一个圆圈,无论是障碍物还是玩家。)

关于Java 游戏 Hitbox 检测和圆角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30198620/

相关文章:

java 8 - 有没有一种从 map 中过滤和删除的好方法?

java - Pig Latin用户定义功能中的HDFS路径

java - 什么是原始类型,为什么我们不应该使用它呢?

Java:查找多边形A不与多边形B相交的区域

java - 为什么叫运行时多态呢?

java - 带有Java的ColorGame(如Minesweeper)

Java - 获取 JPanel 的图像

java - 如何使用单独类中的方法更改 JButton 文本?

android - 检查 android.graphics.path 与自身的交集

c++ - 找到一组相交的矩形