繁体   English   中英

Java:帮助确定两个矩形之间的碰撞

[英]Java: Help determining a collision between two rectangles

我正在创建一个游戏,特别是pacman,这是我的课程学习的一部分,并且在使用Rectangles进行碰撞检测时遇到了问题。

我遇到的问题是,即使在屏幕上可以清楚地看到字符没有碰撞,检查交叉点实际上总是返回true。 下面的输出解释了我的意思:

Pacman详细信息:x 17.0 y 16.0墨迹细节:x 22.0 y 13.0调用intersects()后发生碰撞:true Pacman详细信息:x 18.0 y 16.0 Inky详细信息:x 23.0 y 13.0调用intersects()之后发生碰撞:true

我将矩形设置如下:

public Rectangle pacmanBounds(){
    return new Rectangle(pacRow, pacColumn, 22, 22);
}
public Rectangle ghostBounds(){
    return new Rectangle(ghostRow, ghostColumn, 22, 22);
}

高度和宽度已硬编码用于测试目的,但这是实际的图像尺寸。

每次重新绘制JPanel时,我都会按以下方式检查碰撞:

public boolean checkCollision(){
    Rectangle pacmanBounds = pacman.pacmanBounds();
    //currently commented out for testing
    /*if(pacmanBounds.intersects(inky.ghostBounds()) || pacmanBounds.intersects(blinky.ghostBounds())
            || pacmanBounds.intersects(pinky.ghostBounds()) || pacmanBounds.intersects(clyde.ghostBounds())){
        System.out.println("Oh no!");
        return true;
    }*/

    System.out.println("Pacman details: x " + pacmanBounds.getX() + " y " + pacmanBounds.getY() + " ");
    System.out.println("Inky details: x " + inky.ghostBounds().getX() + " y " + inky.ghostBounds().getY());
    System.out.println("Collision after calling intersects(): " + pacmanBounds.intersects(inky.ghostBounds()));
    return false;
}

在这一点上,我几乎没有关于如何解决此问题的想法,因此,您能提供的任何建议将不胜感激!

假设getX()getY()返回矩形的左上角坐标的点,则这些将是每次调用时矩形的边界:

吃豆人详情:x 17.0年16.0岁墨色详情:x 22.0年13.0年调用intersects()后发生冲突:true

Pacman矩形将是其左上角坐标加上每个方向上的22,从而为您提供一个右下角为(39.0, 38.0)的矩形,如果Inky的右上角为(22.0, 13.0) (39.0, 38.0) ,则该矩​​形与Inky最相交,并且左下角是(44.0, 35.0)

那就是我的样子。 您是说22.0是Pacman和Inky矩形的边界(以像素还是正方形表示)? 如果这些假设正确,那么Inky的左下角(22.0, 35.0)实际上完全位于Pacman内部,这可能不是您想要的。 问题可能出在很多方面,并且很难说出可能是什么,而不必了解更多代码,也不知道矩形的确切含义。 :D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM