XMLでのゲームオブジェクトの動作を定義します
-
19-09-2019 - |
質問
私は私の問題へのデザインパターンのソリューションがあることを確信しているが、私は実行可能なアプローチが何であるかを決めるように見えることはできません。私は、私が説明しましょう...私はちょうどトラブル接続を行うを抱えている、私が欲しいものを知ってます:
私は、ゲームに取り組んでいます。私はゲームオブジェクトを持っています。私はGameBehaviorsを持っています。私のゲームオブジェクトのプロパティは、細部のすべてを持っているXMLファイルで定義されています。
<type name="Object">
<unit name="follower" behavior="followMouse" >
...other unit info here...
</unit>
</type>
ゲームオブジェクトをXMLでの行動のプロパティの値に基づいて、インスタンス化されるように、それの何とかのは、それに接続された振る舞いを持っています。私はそれが周りにオブジェクトを移動言うとすることができるように、その親のすべてのプロパティにアクセスできるようにする行動を必要とするものではない...
私はデザインパターンで多くの経験を持っていない...そして、彼らはほとんど正しいですが、私が読んだ例のどれもが、それは私のためにクリックさせるように思わないようにそれらの数がいるようです。
私はAS3での作業が、それはより一般的なビットにすること自由に感じています。
解決
私はあなたの主な目標は、良い(信頼性、拡張性と保守性)ソリューションを見つけることではなく、名前のデザインパターンを使用しなければなりませんが、組成物を用いた提案をしたい。
だからあなたのゲームオブジェクトは、initFromXML(XML)メソッドを持っている可能性がある、または多分引数としてXMLを取るstaticファクトリメソッドを持っています。これは、XMLを解析し、行動を探し、適切な行動を作成します。ビヘイビアを作成することは、別の工場で行うことができます。
あなたは、ゲームに動作を追加行動リストオブジェクト。行動は、すべてのオブジェクトが共通のクラスから降りかもしれない、あるいは、彼らはすべてのIBehaviorインターフェイスを実装するかもしれません。
ビヘイビアゲームオブジェクトによって呼び出されることによって、またはイベントリスナーを追加することによって、どちらか自分のことを行うことができます。
他のヒント
私はあなたのアプローチを理解すると考えます。
あなたは効果、状態、行動、などの無限の数を持っているので、これは潜在的に、ゲームで多くのことをアップしています。
あなたは「これは、このマウスに従わない」のような機能的なもので、より扱っているされて、あなたの問題で私は何を参照してください、「キーボードコマンドには、この応答を行う」等...
その場合に何ができるかは、一般的に自分のコンストラクタの引数としてのゲームオブジェクトを受け入れる「MouseFollower」または「KeyboardResponder」などの機能クラスを作成することです。
これらのオブジェクトは、その後、イベントリスナーとしてゲームオブジェクトに直接イベントハンドラを適用することができます。
あなたがそれらを削除する必要がある場合、ゲームオブジェクト内の配列にあなたの機能のすべてのオブジェクトを格納することができます。
彼らは、アレイ内にある場合、あなたもまだ冷却方法の均一なセットで機能クラス・インターフェースを作成する好きですかすることができます。例えば、ゲームオブジェクトが非アクティブまたは無効にレンダリングされた、もしそうなら、あなたが言うことができる。
for each IFunctionalObject in GameObject.FunctionalObjects
IFunctionalObject.disable()
私はあなたがゲームオブジェクトの本当に巨大な様々なを持っていた場合は、このアプローチが許容だろうと思い、私はRPGはあなたが様々な機能のスプライトの膨大な数を管理しているまともな例だろうと仮定します。