0

我正在用java制作一个简单的游戏,我有很多方法可以测试两个对象是否碰撞。对象包括人、敌人、箭、墙、硬币等。我有一堆方法可以计算可能发生的每种类型的碰撞,它们看起来像这样:

    public boolean collide(Arrow a, Enemy b)
    {
        Rectangle a1 = a.getBounds();
        Rectangle b1 = b.getBounds();
        if(a1.intersects(b1)) return true;
        else return false;
    }

有没有创建一个通用方法?我尝试使用对象 a 和对象 b 作为参数,但编译器认为它找不到对象的 getBounds()。

4

3 回答 3

3

您可以执行以下操作:

public boolean collide(HasBounds a, HasBounds b){...

使用界面:

public interface HasBounds{
  Rectangle getBounds();
}

你应该在你的对象上定义ArrowEnemy等等......(你可能已经有一个适合的对象层次结构)。

于 2013-03-09T16:12:03.187 回答
1

你觉得这怎么样..

 public boolean collide(Rectangle a1, Rectangle b1)
 {
        return a1.intersects(b1);
 }

或者可能是创建一个界面

public interface CanCollide {
   Rectangle getBounds();
}

并在方法中使用它...

 public boolean collide(CanCollide a, CanCollide b)
 {
     Rectangle a1 = a.getBounds();
     Rectangle b1 = b.getBounds();
     if(a1.intersects(b1)) return true;
     else return false;
 }

希望你觉得它有用。

谢谢!

@leo。

于 2013-03-09T16:15:03.727 回答
-1

只需使用方法:Rectangle2D getShape() 创建抽象类 GameObject。此方法可能如下所示:

abstract class GameObject {
    private Image image;

    GameObject(String path) {
        try {
          image = ImageIO.read(new File(path));
        } catch (IOException ex) {}
    }

    Rectangle2D getShape() {
       return new Rectangle2D.Float(0, 0, (int)image.getWidth(), (int)image.getHeight());
    }
}

Player、Enemy、Arrow、Wall 将是 GameObject 类的子类

于 2013-03-09T16:14:34.853 回答