タグ付けされた質問 「fsm」


3
有限状態マシンをコンポーネントベースのアーキテクチャに配線する方法は?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 閉じた3年前。 ステートマシンは、コンポーネントベースのアーキテクチャで有害な依存関係を引き起こすようです。 具体的には、状態マシンと状態関連の動作を実行するコンポーネントとの間の通信はどのように処理されますか? 私がいる場所: コンポーネントベースのアーキテクチャは初めてです。 私は格闘ゲームを作っていますが、それは重要ではないと思います。ステートマシンを使用して、「クラウチング」、「ダッシュ」、「ブロッキング」などの状態を切り替えることを想定しています。 この状態管理手法は、コンポーネントベースのアーキテクチャにとって最も自然なシステムであることがわかりましたが、これまでに読んだ手法とは矛盾しています: 可変動作文字の動的ゲームオブジェクトコンポーネントシステムすべてのコンポーネントをアクティブ化/非アクティブ化することをお勧めしますアクティベーションの条件を継続的にチェックすることにより、自分自身。 「実行中」または「ウォーキング」などのアクションは状態として理にかなっていると思います。これは、https://gamedev.stackexchange.com/a/7934で受け入れられている応答とは一致しません。 これは便利ですが、あいまいです。コンポーネントベースのゲームアーキテクチャに動作を実装する方法は?ステートマシンのみを含む別のコンポーネントを使用することをお勧めします。ただし、これには、ステートマシンコンポーネントと他のほぼすべてのコンポーネントとの間に何らかの結合が必要です。このカップリングがどのように処理されるべきか理解できません。これらはいくつかの推測です: A. コンポーネントはステートマシンに依存します。コンポーネントは、列挙定数を返す ステートマシンコンポーネントへの参照を受け取りますgetState()。コンポーネントは定期的に自身を更新し、必要に応じてこれを確認します。 B. ステートマシンはコンポーネントに依存します。 ステートマシンコンポーネントは、監視しているすべてのコンポーネントへの参照を受け取ります。getState()メソッドを照会して、どこにいるかを確認します。 C. それらの間のいくつかの抽象化 イベントハブを使用しますか?コマンドパターン? D. コンポーネントを参照する個別の状態オブジェクト状態 パターンが使用されます。コンポーネントのセットをアクティブ化/非アクティブ化する個別の状態オブジェクトが作成されます。状態マシンは状態オブジェクトを切り替えます。 アスペクトの実装としてコンポーネントを見ています。彼らはその側面を実現するために内部的に必要なすべてを行います。コンポーネントは、他のコンポーネントに依存せずに、単独で機能する必要があるようです。いくつかの依存関係が必要であることは知っていますが、ステートマシンはすべてのコンポーネントを制御したいようです。

2
データ駆動型のアニメーション状態
編集:私の質問が正確に何であるかを明確にするために:これは、コンテンツの作成/管理に注目してゲームエンジンでアニメーション/アニメーション状態を処理する良い方法ですか?この方法で行うことの欠点は何ですか?また、それを行う別の方法は何ですか?-私の答えはコメントの中で部分的に答えられましたが、それが進むべき道のようです。 アニメーションをハードコーディングせずに、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'> …
14 animation  state  fsm 

2
ローグライクの説得力のあるバーサーカー敵AI有限状態マシンとは
私は長い間作成してきたローグライクで説得力のあるバーサーカーの敵を作成する方法を探しています。どのような種類のアクションを実行できるか、および警告できるテキストメッセージを検討する場合、NetHackのようなゲームを想定することができます。 これには2つの理由があります。 私はこの問題を1年以上解決しようとしてきましたが、失敗しました。従うべき例。 このSEには、エンティティの状態のマッピングが全体としてどのように見えるかを示す例が一般的に不足しています。そのような例があることはコミュニティにとって役立つでしょう。 私が必要なもの: 私がバーサーカーと言うとき、私は盲目的な怒りに振り回され、暴力や流血と対立している他の実体を攻撃できる敵を意味します。多くのRPGで行われているように、攻撃するターゲットにランダムに切り替えるだけではありません。この目的のために、希望するステータス効果やバフの追加を自由に想定してください。これらの州に関連する情報を詳細に記載してください。 凶暴な実体は彼の怒りを単に強さの増加を伴う状態変化ではない方法で表現する必要があります。これは問題に対する非常に浅い解決策です。実体はバーサーカーのような気分にはなりません。 私が試したこと: 昨年、3つの異なるアイデアを試しました。そして、それらのどれも満足しません。この問題の解決策は、まったく新しいものか、これらのいずれかの「修正」です。私はジュースを流すためにそれらを主に含めています。 私が最初に試みたのは、エンティティの強さを増やし、(敵のリストから)ターゲットをランダム化し、彼にわいせつな言葉を叫ぶなどの単純なベルセルク状態でした。この状態になると、敵は死ぬまでそこに留まります。 次に試みたのは、実際に上記を変更したものです。敵は非常に平たく感じられ、彼を落ち着かせたり、彼の怒りから彼をノックしたりする方法はありませんでした。私は落ち着く機能を追加し(呪文やその他の効果で)、敵を通常の状態に戻し、そこから逃げるような他の状態に遷移できる状態を追加しました。これにより深さが増しましたが、バーサーカーの状態はさらに浅く、破壊的ではないように見えました。 ここから私はそれをすべて廃棄し、より新しい何かを目指しました。基本的に、遷移状態に基づいて敵が自分自身にキャストできるバフ。一度キャストすると、これは敵の振る舞いを変更し(ターゲティングの場合)、敵からの侮辱を無作為に発射しながらダメージを増加させます。それから、彼は他のどの州にも入ることができて、怒り続けることができました。だから彼は逃げるかもしれないが、それでも挑発する。彼は治るかもしれませんが、それでも激怒し、多くのダメージを与えます。これは良いですが、根本的な問題はまだ残っています。彼は本当に怒ったようではなく、ただ怒っています。主にあなたは通常、単独で敵に遭遇し、バーサーカーが好まない他の敵とは遭遇しないため、ランダム化の側面が低く抑えられます。 他にどのように私は男をバーサークしたように見せることができ、そして単に腹を立てた/口を汚しただけではありませんか? これは境界線リストの質問だと思います。だから私はこれらの要件を課します:それは移行のためのすべての状態と条件を示す非常に詳細な完全な回答でなければなりません。そして、それは推測以上のものでなければなりません。自分のローグライクでこれをテストする必要があります。そうでない場合は、ベルセルクのステータスを把握する上で、これが「最良の」ソリューションである可能性がある理由が明らかです。 これが閉まっていても私は怒りません。私はそれが端を踊っていることに気づきました。
7 ai  roguelikes  fsm 

2
有限状態機械で状態間を遷移し、状態を混合する方法は?
プレイヤーによって制御されるエンティティで有限状態マシンを使用する方法がわかりません。 たとえば、マリオスタイルのゲーム(2Dプラットフォーム)があります。私はジャンプしたり、走ったり、歩いたり、ダメージを与えたり、泳いだりすることができるので、最初に考えたのは、このアクションを状態として使用することでした。しかし、ダメージを受けたときに実行している場合はどうなりますか?それともジャンプ、ダメージを受け、同時に撃ちますか? 機能(アクション)をクリーンな方法でプレーヤーに追加したい(エンティティ更新のすべてのアクションに使用しない)。
7 animation  fsm 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.