减少Java游戏中碰撞方法的数量

时间:2013-03-09 16:07:52

标签: java awt collision graphics2d java-2d

我在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()。

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

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

使用界面:

public interface HasBounds{
  Rectangle getBounds();
}

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

答案 1 :(得分: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。

答案 2 :(得分:-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类的子类