2011-04-07 124 views
1

我有一個方法檢查玩家和物品是否相交,並將物品添加到庫存中,但該方法似乎只在矩形完全重疊並且物品是除非我在專門小組中專門說明,否則不會設置爲空。否則,該項目不斷在面板上移動,就好像什麼都沒發生過一樣。檢查java中兩個對象之間的碰撞

public boolean obtainItem(Item item) 
{ 
    if (item.moveable) 
    { 
     Rectangle p = getBounds(); 
     Rectangle i = item.getBounds(); 
     if (p.intersects(i)) 
     { 
      inventory.add(item); 
      i = null; 
      System.out.println("hello"); 
      return true; 
     } 
    } 
    return false; 
} 

爲我的getBounds的代碼()方法是

公共矩形的getBounds() { 界限=新的Rectangle(X,Y,40,40); 返回界限; }

而且它返回正確的邊界

+1

你的代碼看起來不錯。打印出兩者的界限,並確保這些都是你期望他們的結果 – iluxa 2011-04-07 18:47:29

+0

而你不認爲向我們展示'Rectangle.intersects()'方法會有用嗎? – dty 2011-04-07 18:47:44

+0

這實際上是java.awt.Rectangle方法,對(或者至少我希望如此) – iluxa 2011-04-07 18:51:10

回答

0

所有這些代碼看起來不錯,假設你使用java.awt.Rectangle中作爲iluxa指出。這很可能是您的Item類中的錯誤。你可以發佈嗎?

2

Javadoc for Rectangle清楚地表明,如果交點是非零然後rectangle.intersects()返回true否則false

難道您的item.getBounds()getBounds()方法正在返回相對於不同邊界組件的邊界嗎?

1

項目不爲空,除非我在面板中特別說明。

爲什麼要這樣呢? i = null;只是將局部變量i設置爲null。