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

一般に、ステートマシンと関連付けて使用されます。

10
ゲーム状態「スタック」?
ゲームの状態をゲームに実装する方法を考えていました。主なものは次のとおりです。 半透明の上位の状態-一時停止メニューから背後のゲームまで見ることができる OO-Iの何かは、これをより簡単に使用し、背後にある理論を理解し、組織化を維持し、さらに追加することに気付きます。 リンクリストの使用を計画しており、スタックとして扱いました。これは、半透明のために以下の状態にアクセスできることを意味します。 計画:状態スタックをIGameStatesへのポインターのリンクリストにする。一番上の状態は独自の更新コマンドと入力コマンドを処理し、その下の状態を描画するかどうかを決定するメンバーisTransparentを持っています。 それから私はできました: states.push_back(new MainMenuState()); states.push_back(new OptionsMenuState()); states.pop_front(); プレーヤーの読み込みを表すために、オプションに移動してから、メインメニューに進みます。 これはいいアイデアですか、それとも...?他の何かを見るべきですか? ありがとう。

11
ゲーム状態システムの代替手段?
私の知る限り、ほとんどのゲームには、異なるゲーム状態を切り替える「ゲーム状態システム」があります。これらは、「Intro」、「MainMenu」、「CharacterSelect」、「Loading」、「Game」などです。 一方では、これらを状態システムに分離することは完全に理にかなっています。結局のところ、それらはバラバラであり、そうでなければ、明らかに乱雑な大きなswitchステートメントである必要があります。そして、それらは確かに状態システムによってうまく表されています。しかし、同時に、「ゲーム」状態を見て、この状態システムのアプローチに何か問題があるのではないかと考えています。それは部屋の象のようなものだからです。それは巨大で明白ですが、ゲームの状態システムのアプローチに疑問を呈する人はいません。 「ゲーム」が「メインメニュー」と同じレベルに置かれているのは馬鹿げているようです。しかし、「ゲーム」状態を解除する方法はありません。 ゲーム状態システムが最善の方法ですか?「ゲームの状態」を管理するための、より良いテクニックはありますか?映画を描いてエンターをリッスンするイントロ状態、リソースマネージャーでループするローディング状態、そして実際にすべてを行うゲーム状態を持つことは大丈夫ですか?これもあなたにとっては不均衡に思えませんか?何か不足していますか?

4
ゲームの状態管理テクニック?
まず、シーン管理について言及していません。ゲームの状態は、ユーザー入力を有効にするかどうか、特定のアクターを一時的に無効にする必要があるかどうかなど、ゲーム内のあらゆる種類の状態として大まかに定義しています。 具体的な例として、古典的なバトルチェスのゲームだとしましょう。他のプレイヤーの駒を取りに行くと、短いバトルシーケンスが再生されます。このシーケンスの間、プレーヤーはピースを移動することを許可されません。それでは、このような状態遷移をどのように追跡しますか?有限状態マシンですか?単純なブールチェック?後者は、この種の状態の変化が非常に少ないゲームでのみうまく機能するようです。 有限状態マシンを使用してこれを処理する多くの簡単な方法を考えることができますが、すぐに手に負えなくなることもわかります。ゲームの状態/遷移を追跡するよりエレガントな方法があるかどうかだけに興味があります。
24 state 

1
ビヘイビアツリーのコード例
http://altdevblogaday.org/2011/02/24/introduction-to-behavior-trees/ 明らかに、私がこのウェブサイトで見つけた最も興味深い記事。あなたはそれについてどう思いますか ? それはいくつかのコード例を欠いています、あなたは少しも知りませんか?また、ステートマシンはビヘイビアツリーに比べてあまり柔軟ではないことも読みました...その上、ステートマシンと状態パターンの間に真のリンクがあるかどうかはわかりません...
23 ai  state  tree  behavior 

3
アクションに副作用があるターンベースのゲームの設計
私はゲームDominionのコンピューター版を書いています。アクションカード、​​トレジャーカード、および勝利ポイントカードがプレイヤーの個人デッキに蓄積される、ターンベースのカードゲームです。クラス構造はかなりよく発達していて、ゲームロジックの設計を始めています。私はpythonを使用していますが、pygameで簡単なGUIを後で追加するかもしれません。 プレイヤーのターンシーケンスは、非常に単純なステートマシンによって管理されます。時計回りに回すと、プレイヤーはゲームが終了するまでゲームを終了できません。シングルターンのプレイもステートマシンです。一般的に、プレイヤーは「アクションフェーズ」、「購入フェーズ」、「クリーンアップフェーズ」をこの順番で通過します。ターンベースのゲームエンジンを実装する方法の質問への回答に基づいて?、状態マシンはこの状況の標準的な手法です。 私の問題は、プレイヤーのアクションフェーズ中に、自分自身または他のプレイヤーの1人以上に副作用のあるアクションカードを使用できることです。たとえば、1枚のアクションカードを使用すると、プレーヤーは現在のターンの終了後すぐに2ターン目を取ることができます。別のアクションカードを使用すると、他のすべてのプレーヤーは手札から2枚のカードを捨てます。さらに別のアクションカードは、現在のターンでは何も行いませんが、プレーヤーは次のターンに追加のカードを引くことができます。物事をさらに複雑にするために、新しいカードを追加するゲームへの新しい拡張が頻繁にあります。すべてのアクションカードの結果をゲームのステートマシンにハードコーディングすると、見苦しくなり、適応できなくなります。ターンベースの戦略ループへの答え この問題を解決するための設計に取り組む詳細レベルには入りません。 ターン内で行われるアクションによってターンを取るための一般的なパターンを変更できるという事実を包含するために、どのようなプログラミングモデルを使用すべきですか?ゲームオブジェクトは、すべてのアクションカードの効果を追跡する必要がありますか?または、カードに独自の効果を実装する必要がある場合(たとえば、インターフェイスを実装することによって)、十分なパワーを与えるにはどのようなセットアップが必要ですか?この問題に対するいくつかの解決策を考えましたが、それを解決する標準的な方法があるかどうか疑問に思っています。具体的には、アクションカードがプレイされた結果としてすべてのプレイヤーがしなければならないアクションを追跡する責任を負うオブジェクト/クラス/その他、および通常のシーケンスの一時的な変更との関係を知りたいターンステートマシン。

5
戦闘中にゲームの保存を無効にする理由(例:Mass Effect 2)
だから私はMass Effect 2(PC)をプレイしてきましたが、気づいたことの1つは、戦闘に従事していないときにのみゲームを保存できるということです。最初の敵がレーダーに現れるとすぐに、保存ボタンは無効になります。戦闘が終了すると、保存機能が再表示されます。 Mass Effect 2はステートマシンであると想定するのが妥当と思われるため、プログラムの内部状態はいつでもキャプチャして後で再読み込みできます。これは基本的に解決された問題です-ゲームはHalf-Life時代からこのように設計されています。また、BioWareが、このモデルに従わないという決定を下したときに、彼らが何をしていたかを知っていたと仮定することは合理的と思われます。BioWareは、何らかの正当な理由がなければ、彼らがしたようにそれをしなかったでしょう。 戦闘中にゲームの保存機能を無効にする理由は何ですか?

2
コンポーネントベースのエンティティシステムでのゲームの状態と入力の処理
私の質問は: ゲーム状態オブジェクトのスタックを保持することなく、エンティティシステムでゲーム状態を処理するにはどうすればよいですか? したがって、エンティティシステムの設計とは、たとえばエンティティが入力イベントに登録する必要がある場合、入力コンポーネントが入力システムを呼び出し、「このエンティティをこの入力に登録する」と言うことです。これはすべて問題ありませんが、これにゲーム状態の概念(たとえば、一時停止画面)を追加すると、エンティティが現在の状態にあり、入力を受け取る必要がある場合に解決することが問題になります。 「これらのゲーム状態にあるときにこのエンティティをこの入力に登録する」と言うように入力コンポーネント/システムを拡張できますが、これにはすべてのエンティティがどの状態で使用されるかを知る必要があり、それは明らかではないかもしれません。また、登録された入力(およびコールバックを使用する他のシステム)ごとにゲームの状態のリストを保持することは、あまり効率的ではありません。 私が持っていた別のアイデアは、ゲーム状態を表すエンティティがあり、無効になっていることをマークし、入力イベントを生成するときに、そのエンティティが無効なゲーム状態エンティティの子孫ではないことを確認することです。コールバックごとに親を解決するのは費用がかかるようです。 別のアイデアは、すべてのシステムに現在の状態に対してキー設定されたデータを保存させることです。そうすることで、入力を生成するときに、ターゲットエンティティは候補にさえなりません。しかし、これは異なる状態のエンティティ間の通信を許可する機能を本当に損ないます(一時停止画面ではそれほど問題ではありませんが、Oblivion / Skyrimでのロック選択を考えてください)。 私が持っていた唯一の他のアイデアは、すべてのコンポーネントが状態変更イベントを処理し、関連するシステムと通信して登録済みのものを無効にし、この状態に戻るときに再び有効にすることです。 2番目(オブジェクトを無効としてマークする)と4番目(各コンポーネントが状態の変更を処理する)は、私のアイデアの中で最高のように見えますが、特に素晴らしいと思うものはありません。 他の誰かがこれを行う方法について他のアイデアを持っていますか? 編集この質問では特に入力について説明しますが、衝突、タイマーイベントなど、エンティティにメッセージ/イベントを送信できるシステムを意味します。

3
C ++の有限状態マシン
そのため、FSMを使用してゲームの状態管理を行うこと、FSMとは何か、1つを構築するためにスタックまたは状態のセットを使用することについて多くのことを読みました。私はすべてを経験しました。しかし、私はそのためにFSMの実際の適切に設計された実装を書くことにこだわっています。具体的には、どのようにして状態間を移行する問題をどのようにきれいに解決するのか、(どのように)状態が他の状態からのデータを使用できるようにするのか、などです。C ++で実装を設計および作成するためのヒントや、さらに良いコード例はありますか?

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 

3
ソケットを介してn個のクライアントと通信するターンベースのサーバーを記述するパターンはありますか?
私は、ゲームをプレイするTCPソケットネットワーククライアントの任意の数のゲームを管理する汎用ゲームサーバーで作業しています。ダクトテープでハッキングされた「デザイン」が動作していますが、壊れやすく柔軟性に欠けています。堅牢で柔軟性のあるクライアント/サーバー通信を作成するための確立されたパターンはありますか?(そうでない場合、私が下にあるものをどのように改善しますか?) 大体これがあります: ゲームのセットアップ中、サーバーには、クライアントからの同期リクエストとサーバーからの応答を処理するプレーヤーソケットごとに1つのスレッドがあります。 ただし、ゲームが開始されると、1つのスリープを除くすべてのスレッドと、そのスレッドが(逆の要求と応答で)移動について通信しながらすべてのプレイヤーを1つずつ循環します。 ここに私が現在持っているものの図があります。クリックして拡大/読み取り可能なバージョン、または66kB PDFをクリックします。 問題点: プレイヤーは、正確に正しいメッセージで順番に応答する必要があります。(私は各プレイヤーにランダムながらくたに応答させ、彼らが有効な動きを与えてから先に進むことができると思います。) 順番が来ない限り、プレイヤーがサーバーと会話することはできません。(サーバーに他のプレーヤーに関する更新を送信するように指示することはできますが、非同期要求は処理しません。) 最終要件: パフォーマンスは最優先事項ではありません。これは、主に非リアルタイムゲームに使用され、主にAIを相互にピッチングするために使用され、けいれん的な人間には使用されません。 ゲームプレイは常に(非常に高い解像度であっても)ターンベースになります。他のすべてのプレイヤーがターンを取得する前に、各プレイヤーは常に1つの動きを処理します。 サーバーの実装はたまたまRubyで行われます(違いがある場合)。

5
ゲーム状態の保存/読み込み?
ゲームの状態(プロファイル)を保存するために最もよく使用される方法やアルゴリズム、データベーステキストファイル、暗号化の方法、関連するものは何ですか。 Caesar IVがmySQLを使用しているのを見ました。 助言がありますか。
12 state 

2
エンティティ/コンポーネントベースのシステムでゲームの状態を構造化する方法
ここで説明するように、コンポーネント間の通信にシステムを使用するエンティティコンポーネントパラダイムで設計されたゲームを作成しています。開発の段階で、ゲームの状態(一時停止、再生、レベルスタート、ラウンドスタート、ゲームオーバーなど)を追加する必要がありますが、フレームワークでそれを行う方法がわかりません。私は誰もが参照していると思われるゲームの状態に関するこのコード例を見てきましたが、私のフレームワークに適合しないと思います。各州が独自の描画と更新を処理しているようです。私のフレームワークには、システムを使用してすべての更新を処理するSystemManagerがあります。たとえば、次は私のRenderingSystemクラスです。 public class RenderingSystem extends GameSystem { private GameView gameView_; /** * Constructor * Creates a new RenderingSystem. * @param gameManager The game manager. Used to get the game components. */ public RenderingSystem(GameManager gameManager) { super(gameManager); } /** * Method: registerGameView * Registers gameView into the RenderingSystem. * @param gameView …

3
コンポーネントベースのゲームでエンティティの状態とアニメーションを更新するにはどうすればよいですか?
学習目的で(後で一部のゲームで使用するため)コンポーネントベースのエンティティシステムを設計しようとしていますが、エンティティの状態の更新に関して問題が発生しています。 コンポーネント間の依存関係を防ぐために、コンポーネント内にupdate()メソッドを含めたくありません。 私が現在考えているのは、コンポーネントがデータを保持し、システムがコンポーネントを更新することです。 したがって、Transform、Movement、State、Animation、Renderingの各コンポーネントを持ついくつかのエンティティ(たとえば、player、enemy1、enemy2)を含む単純な2Dゲームがある場合、次のようにする必要があります。 すべてのMovementコンポーネントを移動し、Stateコンポーネントを更新するMovementSystem また、アニメーションコンポーネントを更新するRenderSystem(アニメーションコンポーネントは、状態ごとに1つのアニメーション(つまり、フレーム/テクスチャのセット)を持つ必要があり、それを更新することは、現在の状態に対応するアニメーション(jumping、moving_leftなど)を選択することを意味します。フレームインデックスの更新)。次に、RenderSystemは、Renderコンポーネントを各エンティティのアニメーションの現在のフレームに対応するテクスチャで更新し、すべてを画面にレンダリングします。 Artemisフレームワークのようないくつかの実装を見てきましたが、この状況を解決する方法がわかりません。 私のゲームに次のエンティティがあるとします。各エンティティには、一連の状態と、状態ごとに1つのアニメーションがあります。 プレーヤー:「アイドル」、「移動」、「ジャンプ」 enemy1:「moving_up」、「moving_down」 enemy2: "moving_left"、 "moving_right" 各エンティティの現在の状態を更新するために最も受け入れられているアプローチは何ですか?考えられる唯一のことは、エンティティのグループごとに個別のシステムを持ち、状態コンポーネントとアニメーションコンポーネントを個別に持つことです。そのため、PlayerState、PlayerAnimation、Enemy1State、Enemy1Animation ... PlayerMovementSystem、PlayerRenderingSystem ...がありますが、これは悪いことだと思いますソリューションとコンポーネントベースのシステムを持つ目的を壊します。 ご覧のように、私はここでかなり迷っていますので、どんな助けにも感謝します。 編集:私が意図したとおりにこの作業を行うための解決策はこれです: すべてのエンティティに使用できるように、statecomponentとanimationcomponentを十分に汎用的にします。それらに含まれるデータは、再生されるアニメーションや使用可能な状態などを変更するための修飾子になります。–バイト56 今、私はこれらの2つのコンポーネントを再利用できるように十分に汎用的に設計する方法を理解しようとしています。各状態(ウォーキング、ランニングなど)のUIDを持ち、この識別子でキー設定されたAnimationComponentにマップ内のアニメーションを格納することは良いソリューションでしょうか?


2
エンティティまたはコンポーネントの状態変化
私のエンティティの状態管理を処理する方法を理解するのに問題があります。 一時停止やメニューなどのエンティティのコンポーネントシステムとして処理されないため、ゲームの状態管理に問題はありません。エンティティ/コンポーネントの状態のみ。 例としてOrcs Must Dieから描画すると、MainCharacterおよびTrapエンティティがあり、PositionComponent、RenderComponent、PhysicsComponentなどのコンポーネントしかありません。 エンティティは、更新ごとにそのコンポーネントでupdateを呼び出します。また、さまざまなイベントタイプのリスナーを備えた汎用のEventManagerもあります。 次に、トラップを配置できるようにする必要があります。最初にトラップとトラップの位置を選択し、次にトラップを配置します。 トラップを配置するときは、MainCharacterの前に表示され、別の方法でレンダリングされ、それに従って進みます。配置すると、衝突に反応し、通常の方法でレンダリングされます。 これは通常、コンポーネントベースのシステムでどのように処理されますか? (この例は具体的ですが、エンティティの状態を処理する一般的な方法を理解するのに役立ちます。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.