我正在使用Java awt库。
我正在制作一个简单的游戏,我有一个玩家和敌人作为矩形。然后我设置它们的边界,以便我可以在它们上使用相交函数。
现在我想检查玩家和敌人是如何接触的。见attchemnt。
玩家大多有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
}
}
答案 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
方法。