0

別のクラスとしてパーティクル エフェクトを使用しているゲームがあります。

    public class Explosion 
    {
         private List<Particle> Particles; 
         private const int particle_Count = 100; 
         public Explosion(Vector2 location) { 
               Random random = new Random(); 
               Particles = new List<Particle>(particle_Count);
               for(int i = 0; i < particle_Count; i++)
                   Particles.add(new Particle(location, new Vector2(random.NextDouble() * i,
                       random.NextDouble() * i)); 
         }
    }

さて、私のゲームにはいくつかの異なるタイプの爆発が必要ですが、それらはほんのわずかしか違いません (文字通り、1 つの Vector2 オブジェクトの違いです (これは、2 つの座標と、そうでない人のためのいくつかのヘルパー関数を格納するオブジェクトにすぎません)。 t XNA に精通している))

私の質問は、Random はコンストラクターに入ったときにのみアクセスできるため、この爆発のバリエーションをどのように作成するのですか?

爆発ごとに新しいクラスを作成する必要がありますか? (爆発間の変化が少ないため、これは不要のようです)

関数をオーバーロードして、爆発ごとに個別のパラメーター (おそらく int) を取得する必要がありますか?

コンストラクターを介して Vector2 を直接渡す必要があります (これは、適切な OOP 原則を破るように思われます)。

または、これを回避する別の方法がありますが、私は見ていません。

どんな助けでも大歓迎です。私は最初から正しく物事を行うのが好きで、これは私のアプリケーションの重要な部分です。

ありがとう。

4

1 に答える 1

3

各バリエーションの間にはパラメーターの違いが1つしかないため、(前述のように)別のパラメーターをコンストラクターに渡すのが最善です。必要な最小限の情報を渡すだけです。必要に応じて、必須ではないようにデフォルト値を指定します。

public Explosion(Vector2 location, int velocity = 1) { 
}

それがintだけでなく複雑なオブジェクトである場合は、ある種のヘルパーメソッドを作成することを検討してください。

public class Explosion
    public Explosion(Vector2 location, Velocity velocity) { 
    }
}

public class Velocity {
    public static Velocity Get(int a, int b) {
        // construct the velocity as needed
    }
}

このように、Explosionのコンストラクターを呼び出すのは、面倒になる必要はありません。

var explosion = new Explosion(vectorLocation, Velocity.Get(5, 10));
于 2012-12-01T12:01:07.400 に答える