2014-02-25 67 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