データ駆動型のアニメーション状態
編集:私の質問が正確に何であるかを明確にするために:これは、コンテンツの作成/管理に注目してゲームエンジンでアニメーション/アニメーション状態を処理する良い方法ですか?この方法で行うことの欠点は何ですか?また、それを行う別の方法は何ですか?-私の答えはコメントの中で部分的に答えられましたが、それが進むべき道のようです。 アニメーションをハードコーディングせずに、2Dゲームエンジンの趣味プロジェクトでアニメーションを処理しようとしています。アニメーションの状態をハードコーディングすることは、よくあることですが、非常に奇妙な現象のように思えます。 少しの背景:コンポーネントがデータの袋であり、サブシステムがそれらに作用するエンティティシステムを使用しています。ポーリングシステムを使用してアニメーションの状態を更新することにしました。 アニメーションを述べて私は意味: "walking_left"、 "running_left"、 "walking_right"、 "撮影"、... アニメーションを処理する私のアイデアは、データ駆動型モデルとして設計することでした。データはxmlファイル、rdbmsなどに保存できます。また、ゲーム/レベル/の開始時にロードすることもできます。この方法で、コードをどこにでも変更することなく、アニメーションとトランジションを簡単に編集できます。ゲーム。 例として、念頭に置いたデータ定義の xmlドラフトを作成しました。 非常に重要なデータの1つは、単にアニメーションの説明です。アニメーションには一意のID(わかりやすい名前)が付けられます。画像への参照IDを保持します(異なるアニメーションは異なるスプライトシートを使用する可能性があるため、使用するスプライトシート)。アニメーションを実行する1秒あたりのフレーム。ここでの「リプレイ」は、アニメーションを1回または無限に実行する必要があるかどうかを定義します。次に、四角形のリストをフレームとして定義しました。 <animation id='WIZARD_WALK_LEFT'> <image id='WIZARD_WALKING' /> <fps>50</fps> <replay>true</replay> <frames> <rectangle> <x>0</x> <y>0</y> <width>45</width> <height>45</height> </rectangle> <rectangle> <x>45</x> <y>0</y> <width>45</width> <height>45</height> </rectangle> </frames> </animation> アニメーションデータは、アニメーションリソースプールに読み込まれて保持され、それを使用しているゲームエンティティによって参照されます。画像、音、テクスチャなどのリソースとして扱われます... 定義する2番目のデータは、アニメーションの状態と遷移を処理する状態マシンです。これは、ゲームエンティティが存在できる各状態、移行できる状態、およびその状態の変化をトリガーするものを定義します。 この状態マシンは、エンティティごとに異なります。鳥には「歩く」と「飛ぶ」という状態があるかもしれませんが、人間には「歩く」という状態しかありません。ただし、複数の人間がおそらく同じ状態になる可能性があるため(特に、モンスターなどの一般的なNPCを定義する場合)、異なるエンティティで共有できます。また、オークは人間と同じ状態になる場合があります。この状態定義は、ゲームエンティティの選択グループによってのみ共有される可能性があることを示すためだけです。 <state id='IDLE'> <event trigger='LEFT_DOWN' goto='MOVING_LEFT' /> <event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' /> </state> <state id='MOVING_LEFT'> …