0

私はゲームを作成しており、Player のクラス、Enemy のクラス、Bullet のクラスがあります。私のエンジンの設計では、ゲーム内のすべてのオブジェクトの既存のfor (Shape s : shapes { g.fill(s) } 場所を呼び出すだけで、グラフィックスを描画するのが最も論理的 です。これは問題なく機能しますが、弾丸をプレイヤーとは異なる色にし、プレイヤーを敵とは異なる色にしたいと思います。Player、Bullet、および Enemy クラスを変更して、awt.Graphics が描画する色を認識できるようにするにはどうすればよいですか?shapesList<Shapes>

編集:別の受け入れられる答えにはshapes、クラスごとに分類して分離する方法を見つけることが含まれる可能性がありますが、完全なリストが既に存在するため、直感に反するように思えます。

4

4 に答える 4

1

ある種の Map を使用して、各 Shape を Color に関連付けることができます。次に、各形状をペイントするときは、次のようなことをするだけです...

for (Shape shape : shapes) {
    Color color = mapColors.get(shape)(
    if (color != null) {
        g.setColor(color);
    } else{
        // set the color to a default value 
    }
    g.fill(shape);
}

私にとって、このアプローチの問題点は、形状と色の関連付けを切り離してしまうことです。また、アセットをペイントできる方法も制限されます

より良い解決策は、単純なメソッドAssetを提供するクラスを考案することです。paint各アセットがレンダリング方法を定義できるようにするには

public interface Asset {
    public void paint(Graphics g);
}

List次に、形状リストに似た資産の を使用するだけですが、代わりpaint(g)に ( のインスタンスでAsset) を呼び出して、資産がどのようにペイントするかを決定できるようにします...

于 2013-05-19T07:19:18.773 に答える
1

OOPの例を使用する必要があります

 Interface Shapes{
  public Color getColor() ;
 }
 class Player implements Shapes{ 
     public Color getColor() {
        return Color.red;
     }
 }
 class Enemy implements Shapes{ 
     public Color getColor() {
        return Color.green;
     }
 }
 //  now the Paint

 for (Shape s : shapes} { g.fill(s.getColor())};
于 2013-05-19T06:52:46.763 に答える
1

色の区別だけが必要な場合は、呼び出すg.setColor(Color)前に呼び出しますg.fill(s)

于 2013-05-19T06:54:11.383 に答える