0

私の問題にはデザインパターンの解決策があると確信していますが、実行可能なアプローチが何であるかを判断できないようです。私は自分が何を望んでいるのかを知っています、私は接続を確立するのに問題があります...私は説明します:

私はゲームに取り組んでいます。私はGameObjectsを持っています。GameBehaviorsがあります。私のGameObjectsのプロパティは、すべての詳細を含むXMLファイルで定義されています。

<type name="Object">
    <unit name="follower" behavior="followMouse" >
        ...other unit info here...
    </unit>
</type>

したがって、gameObjectは、XMLのbehaviorプロパティの値に基づいてインスタンス化されるため、何らかの形でそれに関連付けられた動作があります。親のすべてのプロパティにアクセスできるようにするための動作が必要です。たとえば、オブジェクトを移動したり、移動したりしないようにする必要があります...

私はデザインパターンの経験があまりありません...そしてそれらの多くはほとんど正しいように見えますが、私が読んだ例のどれも私にとってそれをクリックさせないようです。

私はAS3を使用していますが、もう少し一般的にしてください。

4

2 に答える 2

0

コンポジションを使用することをお勧めしますが、主な目標は、名前付きのデザイン パターンを使用するのではなく、優れた (信頼性が高く、拡張可能で、保守可能な) ソリューションを見つけることです。

したがって、ゲーム オブジェクトには initFromXML(xml) メソッドが含まれているか、xml を引数として受け取る静的ファクトリ メソッドが含まれている可能性があります。これにより、xml が解析され、動作が検索され、適切な動作が作成されます。動作の作成は、別のファクトリで行うことができます。

次に、その動作をゲーム オブジェクトの動作リストに追加します。ビヘイビアはすべて、共通クラスから派生したオブジェクトである場合もあれば、すべて IBehavior インターフェイスを実装している場合もあります。

ビヘイビアーは、ゲーム オブジェクトによって呼び出されるか、イベント リスナーを追加することによって、その機能を実行できます。

于 2010-01-08T15:31:53.673 に答える
0

私はあなたのアプローチを理解していると思います。

潜在的に無限の数の効果、ステータス、動作などがあるため、これはゲームでよく出てきます。

あなたの問題で私が見ているのは、「これはこのマウスに従いますか」、「これはキーボードコマンドに応答しますか」などの機能的なことをより多く扱っていることです...

その場合、「MouseFollower」や「KeyboardResponder」などの機能クラスを作成して、コンストラクターの引数として GameObject を一般的に受け入れることができます。

これらのオブジェクトは、イベント ハンドラーをイベント リスナーなどのゲーム オブジェクトに直接適用できます。

機能オブジェクトを削除する必要がある場合に備えて、すべての機能オブジェクトをゲームオブジェクト内の配列に格納できます。

それらが配列にある場合でも、統一された一連のメソッドを使用して機能クラスのインターフェイスを作成するなど、クールなことを行うこともできます。たとえば、GameObject が非アクティブまたは無効にレンダリングされた場合、次のように言うことができます。

for each IFunctionalObject in GameObject.FunctionalObjects
IFunctionalObject.disable()

非常に多種多様なゲーム オブジェクトがある場合、このアプローチは許容できると思います。RPG は、さまざまな機能の膨大な数のスプライトを管理する適切な例になると思います。

于 2010-01-08T15:49:41.663 に答える