0

汎用性、ダイナミズム、および整理のために、ゲーム内のすべてのオブジェクトに対して新しい .AS ファイルを作成したいと考えています。つまり、シューティング ゲームの場合、弾丸の種類ごとに新しいクラス ファイルを作成し、その固有のプロパティをすべてそれぞれのクラスに記述したいと考えています。ゲーム内のすべてのタイプの敵に対して同じことをしたい.

これはすべて、10 種類以上の異なるタイプの敵/弾丸が存在する可能性があることを前提としています。

一部の人々は、たとえば弾丸の各タイプの値を 1 つのクラスに保持し、発射される弾丸のタイプに応じて変数を変更するように私に強く求めてきました。それは私にはあまり面白くないように思えます。むしろ、一連の異なるクラス ファイルを作成し、すべての箇条書きを共通の配列にプッシュするだけです (これはこれまでのところ機能しています)。そうすることで、正しい、または良いアイデアです。

4

2 に答える 2

1

私の意見では、弾丸(または、さらに言えば敵)は同じファミリオブジェクトを表すため、共通のインターフェイス、または各具象クラスによって実装または拡張される抽象クラスを持つことは理にかなっています。これは良い考えですか?このように考えてみましょう:

アプリケーション全体で使用されるクラスを作成するときは、基本的にAPIを構築します。良い習慣は、実装ではなく、常にインターフェースにプログラムすることをお勧めします。これが意味するのは、トップレベルのクラスは低レベルのクラスに依存するのではなく、抽象化を使用する必要があるということです。このようにして、さまざまなレベルのコンポーネントが緩く結合され、コード全体がより柔軟になります。この原則は依存性逆転として知られており、 SOLID設計の5つの原則の1つです。

提供されるリンクは、コードの構造化方法に関する追加情報を提供するはずです。

すてきな一日を!

于 2012-08-07T07:08:12.260 に答える
1

継承を使用して、変更に対してよりクリーンで柔軟にすることができます。その後、複数のプロジェクトでも、同じ汎用基本クラスを拡張できます。

基本クラス (またはインターフェイス) (たとえば Bullet.as) から開始し、すべての箇条書きに共通するすべての機能とプロパティをそのクラスに配置します。同じプロパティを共有する弾丸のグループがあるときはいつでも、サブクラスを作り続けてください。したがって、接触するとすべて爆発する複数の種類の弾丸がある場合は、次のような設定を行うことができます。

public class Bullet {
    public function fire():void {};

    public property size:int;
    public property strength:Number;
    public property label:String;
    public property maxDistance:Number;
} 

public class ExplodingBullet extends Bullet {
    public property blastRadius:Number;

    public function explode():void {
        trace("Kaboom");
    }
}

public class BazookaBullet extends ExplodingBullet {
    public function BazookaBullet():void {
        blastRadius = 10;
        label = "Bazooka";
        size = 5;
        maxDistance = 120;
    }
}

これにより、バズーカ弾に、それが拡張するクラスのすべての機能が与えられます。すべての Bullet クラスで同じプロパティとメソッドをすべて再作成するのとは対照的に、このようにすることには非常に多くの利点があります。

于 2012-08-07T22:28:41.453 に答える