2011-04-07 44 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。