2014-02-25 45 views
1
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。为什么会发生这种情况?我只用布尔值来帮助调试。检查是否矩形intercect只有当它们相交于第一检查

我已记录两个值,其中相信矩形应当相交,但并不:

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

+0

这是一个有点硬,只有这些信息来回答。也许'type'是0?也许'Cycle.rect'确实不会与'r'相交?检查'Cycle.rect'和'r'的每个位置。另外,记录值'tileY'可能会有所帮助。 –

+0

而不是记录tileY我记录了两个矩形以确保它们相交。我登录的类型检查,所以我知道类型不是0. 02-24 23:32:50.762:V/Rect(16624):Rect(50,314 - 50,48) 02-24 23: 32:50.762:V/Rect(16624):Rect(49,329-100,100) 这两个矩形应该相交? – seanEP

+0

检查我的答案。经过一番试验后,如果我交换你的最高价值,我会得到你的'Rect'相交。 –

回答

0

问题在于Java中的坐标系统,左被认为是0.因此,如果top坐标是小于bottomRect”是“定义的”。否则,它被认为是空的。

Rect API reference

注:大多数方法不检查看到,坐标正确排序(即左< =右侧和顶部< =底部)。

也为set()(注:强调对矿井),

设置矩形的坐标到指定的值。注意:没有执行范围检查,所以它是由确定左< =右和顶部< =底

而且isEmpty()

返回true如果矩形为空(左> = right或top> =底部)

+0

你摇滚!我使用顶部和底部作为高度和宽度。这导致了我所有的错误。谢谢! – seanEP