0

私はJavaで簡単なゲームを作っています.2つのオブジェクトが衝突するかどうかをテストするメソッドがたくさんあります. オブジェクトには、人、敵、矢、壁、コインなどがあります。発生する可能性のある衝突のすべてのタイプをカウントするメソッドがたくさんあります。それらは次のようになります。

    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();
}

Arrowオブジェクトなどで定義する必要Enemyがあること...(それに適したオブジェクト階層がすでにある場合があります)。

于 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;
 }

役に立つことを願っています。

ありがとう!

@レオ。

于 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 に答える