有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用矩形时的java冲突检测

所以我明白,目前我并没有以最好的方式编写代码;这是一种试运行。我想做的是使用矩形和intersects属性进行墙碰撞(如果我没有使用正确的术语,很抱歉)。到目前为止,我在屏幕上有两个矩形。1玩家控制游戏中与之相撞的另一方。当它们相撞时,玩家停止移动。问题是,如果玩家试图在已经发生碰撞的情况下移动到矩形中,那么玩家就不能在垂直于移动的任何方向上移动,即如果玩家按住向右箭头键移动到矩形中,那么他们就不能向上或向下移动。游戏的前提是,如果你的x或y坐标无效,那么你将被移回上次记录的有效坐标,但我无法分别检测有效的x和y坐标。以下是代码:

public void Collision() 
{

    if(x < 0)
        x = 0;

    if(x > 400 - width)
        x = 400 - width;

    if(y < 0)
        y = 0;

    if(y > 300 - height)
        y = 300 - height;


    rect1 = new Rectangle(x, y, 16, 16);
    rect2 = new Rectangle(sx, sy, wid, hei);

    if(!rect1.intersects(rect2))
    {
        validX = true;
        validY = true;
    }
    else
    {
        validX = false;
        validY = false;
    }


    if(validX)
    {
        lastValidX = x;
    }

    if(validY)
    {
        lastValidY = y;
    }

    if(!validX)
    {
        x = lastValidX;
    }

    if(!validY)
    {
        y = lastValidY;
    }

}

Guy类中的Collision()方法就是我认为存在问题的地方。是的,我的代码现在很混乱,但这只是一个测试

谢谢,大卫


共 (1) 个答案

  1. # 1 楼答案

    您可以通过在这里执行额外的逻辑来实现您所描述的内容(即,当一个为假,另一个为真时检测案例):

    if(!rect1.intersects(rect2))
    {
        validX = true;
        validY = true;
    }
    else
    {
        validX = false;
        validY = false;
    }
    

    然而,似乎你不应该让矩形一开始就处于“碰撞”状态。例如,可以将Move方法更改为

    public void Move()
    {
        int oldX = x, oldY = y;
        x += dx;
        y += dy;
        if (Collision()) {
            x = oldX;
            y = oldY;
        }
    }