检查矩形是否仅在第一次检查时相交时才起作用

时间:2014-02-25 03:56:23

标签: java android game-engine intersection rectangles

public void update() {
    speedY = bg.getSpeedY() / 2;
    tileY += speedY;
    r.set(tileX, tileY, 50, 48);
    // Collision with cycle here:
    if (tileY > 480) {
        r = null;
    }
    if (tileY < 480) {
        checkCollision();
    }
}

private void checkCollision() {
    if (type != 0) {
        boolean val = Rect.intersects(Cycle.rect, r);   
        if (val) {
            test = true;
        }
    }
}

使用调试器我确定所有矩形都正确更新,并且Cycle.rect返回正确的矩形位置。如果矩形在第一次检查时相交,则可以正常工作。但是,随着更新运行,交叉点永远不会返回true。为什么会发生这种情况?我只使用boolean val来帮助调试。

我记录了两个值,我认为矩形应该相交但不是:

r:02-24 23:32:50.762:V / Rect(16624):Rect(50,314 - 50,48) Cycle.rect:02-24 23:32:50.762:V / Rect(16624):Rect(49,329 - 100,100)

1 个答案:

答案 0 :(得分:0)

问题在于Java中的坐标系,其中左上角被视为0.因此,如果Rect坐标较少,则top被“定义”比bottom。否则,它被认为是空的。

来自Rect API reference

  

注意:大多数方法都不检查坐标是否正确排序(即左<=右和顶<&lt; =底)。

同样适用于set()(注意:强调我的),

  

将矩形的坐标设置为指定的值。注意:不会执行范围检查,因此由调用者决定确保左&lt; = right和top&lt; = bottom

isEmpty()

  

如果矩形为空(左> gt = =右或顶部&gt; =底部)

,则返回true