加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java游戏Hitbox检测和圆角

发布时间:2020-12-15 00:34:45 所属栏目:Java 来源:网络整理
导读:我正在研究一个简单的2D游戏,包括 Java,swing和没有框架.我有一个矩形播放器,用户可以四处移动.在地图上是玩家不应该经历的几个障碍.我通过为玩家制作一个新的矩形对象以及每个障碍物来实现这一点.但我不确定这是否是正确的方法.它有效,但玩家的动作并不是真
我正在研究一个简单的2D游戏,包括 Java,swing和没有框架.我有一个矩形播放器,用户可以四处移动.在地图上是玩家不应该经历的几个障碍.我通过为玩家制作一个新的矩形对象以及每个障碍物来实现这一点.但我不确定这是否是正确的方法.它有效,但玩家的动作并不是真正的用户友好.如果玩家想要通过两个障碍物,他们必须在完美的坐标上通过.

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

现在我的第二个问题:
我想用相同的hitbox替换矩形的hitbox,但是有圆角,这样玩家可以更轻松地通过.

这是游戏在启用了hitbox的情况下的样子.

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

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

解决方法

很多年前,我写了一个Khepera模拟器作为本科生最后一年项目的一部分.我开始做你正在做的碰撞检测,那是交叉区域……我的主管让我注意到,由于我的机器人的形状是一个圆圈,我只能检查机器人的中心是否在另一个形状内,如果是是发生碰撞的情况.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读