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)
答案 0 :(得分:0)
问题在于Java中的坐标系,其中左上角被视为0.因此,如果Rect
坐标较少,则top
被“定义”比bottom
。否则,它被认为是空的。
注意:大多数方法都不检查坐标是否正确排序(即左<=右和顶<&lt; =底)。
同样适用于set()
(注意:强调我的),
将矩形的坐标设置为指定的值。注意:不会执行范围检查,因此由调用者决定确保左&lt; = right和top&lt; = bottom 。
isEmpty()
如果矩形为空(左> gt = =右或顶部&gt; =底部)
,则返回true