2015-10-25 28 views
1

我正在使用Java awt库。如何检查两个矩形是从左边还是顶部还是右边触摸

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

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

enter image description here

大多有4种不同的方式玩家可以接触到的敌人。见附件。现在如果玩家从顶部触及敌人,那么比'if'陈述中的敌人还要多。但是如果玩家从左侧或右侧触及敌人,则比我想要引用'其他'的说法。我写了下面的代码,但它不起作用。出于某种原因,它总是出现在其他语句中。

我在想可能有另外一个功能可以使用吗?

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

回答

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.heightb.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方法。

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 
     } 
    } 
+0

创意和有益的 –

相关问题