如何检查两个矩形是从左侧还是顶部或右侧触摸

时间:2015-10-25 18:15:10

标签: java intersect

我正在使用Java awt库。

我正在制作一个简单的游戏,我有一个玩家和敌人作为矩形。然后我设置它们的边界,以便我可以在它们上使用相交函数。

现在我想检查玩家和敌人是如何接触的。见attchemnt。

enter image description here

玩家大多有4种不同的方式可以触及敌人。看到附件。现在,如果玩家从顶部触摸到敌人,那么我就会进入“如果' statment。但是如果玩家从左边或右边触摸敌人,那么我就不会在其他地方接触敌人。 statment。我写了下面的代码,但它不起作用。由于某种原因,它总是出现在其他方面。

我在想可能还有其他功能我可以使用吗?

    if (player.getBounds().intersects(enemy.getBounds())) {
        if (playerY + playerHeight <= enemy.getY()) {
                 //player touch enemy from top
        } else {
                //player touch enemy from left or right
        }
    }

2 个答案:

答案 0 :(得分:1)

可能不是最好的解决方案,但它可以满足我的需求。感谢

if (player.getBounds().intersects(enemy.getBounds())) {
if (y + height <= enemy.getY() + enemy.getHeight() / 2) {        
                 //player touch enemy from top
        } else {
                //player touch enemy from left or right
        }
    }

答案 1 :(得分:0)

您首先检查矩形以查看它们是否相交。交叉口不是“触摸”。当他们有一个非空的公共矩形时。

因此,例如,以下两个矩形相交:

Rectangle a = new Rectangle( 100,100,200,200);
Rectangle b = new Rectangle( 100,300,200,200);

但请注意,a.y(100)+ a.height(200)正好是b.y(300)。

当然,如果a高于b,例如,y为99,则a.y + a.height 更少而不是b.y

因此,在a.y + a.height <= b.y的所有情况下,矩形都不相交

由于只有矩形相交才会进入if,因此您总是会在else中结束。

如果您想检查它们是否与上方有轻微重叠,您可以将条件更改为playerY + playerHeight == enemy.getY() + 1,甚至

int playerBottom = playerY + playerHeight;
if ( playerBottom > enemy.getY() && playerBottom <= enemy.getY() + DELTA ) {
   ....
}

其中DELTA是一个常量,表示您认为“触摸”的重叠程度。

如果您希望看到他们触摸而不重叠,则无法使用intersects方法。