2012-03-02 8 views
1

私は戦略ゲームを作っていて、問題の一種を見つけました。基本的には、私が必要とするユニットの動的な作成に対処する方法がわかりません。大きなswitch文を使うべきか、より理想的な解決策があるのでしょうか?多くのオブジェクトを扱う

答えて

2

あなたは本質的に、実行時にさまざまな種類のクラスをインスタンス化することを話しています。可能性は多数ある:)

1つのオプションは次のとおりです。

あなたがそうのように、キーはあなたの「単位」の識別子で、値がクラスオブジェクトであるマップ(基本的にオブジェクト)を、管理します。

var unitMap:Object = { 
    "hero": UserGameCharacter, 
    "enemy": NPCharacter, 
    "chicken": ChickenCharacter 
}; 

値はインスタンスではなくクラスオブジェクトであることに注意してください。さらに、すべての文字クラスが基本Characterクラスを拡張するか、Characterインターフェイスを実装すると仮定しましょう。

var newCharacter:Character = new (unitMap["hero"])(); 

このようにして、switch文を使用する必要はありません。これで、「ユニット」をインスタンス化することができます。希望、これは出発点として役立ちます。

+0

オム...だから、基本的権利、列挙のようなものを作成し、私が作成する必要があるクラスのコンテナとしてCharacterオブジェクトを使用できますか?しかし、もし必要ならオブジェクトのコンストラクタをどのように使うことができますか? unitMap ["hero"](arg)のようなものは動作しますか? – MKII

+0

はい、正しい、それは動作します。ところで、もちろん、作成したいクラスを直接参照することもできます。私が思ったのは、作成するクラスが基本クラスを拡張したり、使いやすいようにインターフェイスを実装したりする場合に役立つかもしれません。それは私が "キャラクター"を参照していたものです。 – ghost23

+0

さて、わかりました。ありがとうございました。 – MKII

1

建設作業が必要な複数の種類のエンティティを動的に作成する場合は、常に抽象ファクトリを使用してください。それはあなたのゲームをより柔軟でモジュラーにします。特に戦略ゲームでは、各ユニットを構築する複雑なロジックを持つことがあります。

http://www.as3dp.com/2010/11/saturated-abstract-factory-1-wholesale-creation/

+0

私の時間は限られています(このゲームは大学のプロジェクトです)ので、締め切り前に上記の解決策を理解して実装することはできません。ありがとうございました。 – MKII

1

あなたはまた、ボックス機能のうちいくつかは、すべての種類のゲームオブジェクトに対処するために提供されるプッシュボタンエンジン、見てみたいことがあります。以下の記事をご覧ください。 Dependency Injection機能は、オブジェクトの使用と作成を切り離すための良い方法です。

https://github.com/PushButtonLabs/PushButtonEngine

+0

上記のように、これは私ができるだけ早く詳細に調べるものです。ありがとうございました。 – MKII

関連する問題