0

そのため、どこにも正確な答えを見つけることができませんでした。ゲーム内のすべてのキャラクターを作成するエンティティ クラスがあります。例: Player は Entity を継承します。

ここでやりたいことは、エンティティ クラスから Player の「Update」メソッドを呼び出すことです。これは可能ですか?今作成するすべての新しいエンティティ タイプに対してこれを行う必要があるためです。

 foreach (Entity entity in entityList) {
                if (entity is Zombie) {
                    Zombie zombie = (Zombie)entity;
                    zombie.Update();
                }
                //new character here
            }

前もって感謝します!

4

2 に答える 2

1

「更新」の概念がすべてのエンティティに適用される場合Update、仮想関数を作成してオーバーライドEntityさせることができます。Player次に、メンバー関数内で特定のオブジェクトEntityを呼び出して、呼び出しを動的にディスパッチするだけです。Update()Entity

foreach (Entity entity in entityList) { entity.Update(); }

ifUpdate()がすべての s に対して意味をなさない場合Entity、それらを の仮想関数として持つとEntity、そのクラスのインターフェイスが汚染されます。あなたの選択は正しいように思えます。

動的なダウンキャストを回避したい場合は、ビジター パターンの使用を検討することもできます。

于 2013-03-22T11:07:39.270 に答える
0

Update()サブクラスでメソッドをオーバーライドします。entity.Update()次に、遭遇したエンティティを呼び出すだけです。これがポリモーフィズムと呼ばれるものです。

于 2013-03-22T11:07:24.167 に答える