Java 移动前的碰撞检测

Java Collision Detection Before You Move

我终于通过在 2 个矩形之间使用 intersects() 来进行碰撞检测,而且它似乎可以正常工作。然而,玩家只是卡在矩形中而无法移动。所以我现在试图在玩家移动之前检查碰撞。

这是我尝试过的:

    if(up == true){
        Rectangle futurerect = new Rectangle(px,py-=5,81,150);
        if(!futurerect.intersects(wallexample)){
            py-=5;
            repaint();
        }
    }
    if(down == true){
        Rectangle futurerect = new Rectangle(px,py+=5,81,150);
        if(!futurerect.intersects(wallexample)){
            py+=5;
            repaint();
        }
    }
    if(left == true){
        Rectangle futurerect = new Rectangle(px-=5,py,81,150);
        if(!futurerect.intersects(wallexample)){
            px-=5;
            repaint();
        }
    }
    if(right == true){
        Rectangle futurerect = new Rectangle(px+=5,py,81,150);
        if(!futurerect.intersects(wallexample)){
            px+=5;
            repaint();
        }
    }

我只是创建了一个新的矩形,但在玩家移动时它所在的位置,并检查它是否发生碰撞。如果是,请不要移动。

问题是,当玩家移动到矩形中时,它只会变慢。它仍然穿过墙壁,但由于某种原因移动速度较慢。

是什么导致了这个问题?

您似乎没有检查正确的区域,因为您对新 Rectangle 的实例化是递增/递减 py 或 px 并在 Rectangle 的构造函数中为其分配该值。

因此,如果您在笛卡尔坐标中的 0,0 处有一个玩家,并且您想知道他们是否向上移动,他们是否会撞墙。

if (up == true) {

    Rectangle futurerect = new Rectangle(px,py-=5,81,150);

    if(!futurerect.intersects(wallexample)){
        py-=5;
        repaint();
    }
}

一旦您实例化矩形,py 现在设置为 -5。

Rectangle futurerect = new Rectangle(px,py-=5,81,150);

因为第二个参数中的py-=5。

当您执行相交检查时,它正在查看 0、-5。一旦说 "Yes, no wall here" 你将 py 递减 5。现在我们有一个玩家坐标 px,py 为 0,-10,你没有检查那个位置的墙。

尝试修复此处的逻辑,使其不会将新值分配给 px / py:

Rectangle futureRect = new Rectangle(px, py - 5, 81, 150);