有 Java 编程相关的问题?

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

java如何检查两个矩形是否从左、上或右接触

我正在使用JavaAWT库

我正在做一个简单的游戏,我有一个球员和敌人的矩形。然后我设置它们的边界,这样我就可以对它们使用intersect函数

现在我想看看玩家和敌人是如何接触的。见附件

enter image description here

玩家接触敌人的方式主要有四种。见附件。现在,如果玩家从顶部接触敌人,我就进入“如果”状态。但如果玩家从左边或右边碰到敌人,我就想进入“其他”状态。我写了下面的代码,但它不起作用。由于某种原因,它总是进入其他状态

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

    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) 个答案

  1. # 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
            }
        }
    
  2. # 2 楼答案

    首先检查矩形,看它们是否相交。十字路口并不“触碰”。当它们有一个公共矩形不是空的时候

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

    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)

    当然,如果ab之上,比如说,它的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 ) {
       ....
    }
    
    <^ >其中{{CD14>}是一个常量,表示你认为“触摸”重叠的大小。

    如果你想看到它们在没有重叠的情况下接触,你不能使用intersects方法