お世話になります_(._.)_
僕は誤解の塊で、手間がかかると思います…。
ゲームの「流れ」をなるべく状態遷移で実現したいです。そのための状態間のメッセージのやり取りで困っています。C++とVisual C++ Express 2010 Editonを使用しています。
スタック式のステートマシンを使っています。このステートマシンは、一番最後にPushされた状態のUpdate()を毎フレーム呼びます。
例えば、ドラクエ式のターン制の実装戦闘を考えています。Actorが全員用意されたとして、TurnProcess状態から始めます。プレイヤ(NeedsInput()の返り値がtrueのActor)の行動順が回ってきたら、CommandSelection状態をPushします。CommandSelection状態では、Commandを選択したら、自身をPopします。このとき、選択したCommandを返す上手い方法が思いつきません。何か定石はないでしょうか。
問題点
・どうやって選択したCommandをTurnProcess状態に伝えるか
・キー入力や数フレーム間の処理が必要になった度に、毎回状態を作らなければならないのか
(Animation状態など また、WaitingSelection状態も、ワールドマップからメニューを開いたときなど、複数必要になると思います)
考えた方法
1.引数で返してもらう
・TurnProcess内の状態を、TurnProcessとWaitingSelectionに分けます。
・毎フレーム、WaitingSelection状態ならば、TurnProcess::Update()からCommandSelection::Update()を呼びます
・引数でActionを返してもらいます
問題点
・CommandSelection状態の中で、さらにItemSelection、ItemCommandSelection状態を積みます。返し値で返すためにUpdate()からUpdate()を呼び、さらにUpdate()を呼ぶことに違和感があります
2.Observerパターンで選択結果を通知してもらう
問題点
・キー入力や数フレーム間の処理が必要な場合、毎回イベントとリスナを作らなければなりません
ゲームの流れの実現と状態間のメッセージのやり取り
Re: ゲームの流れの実現と状態間のメッセージのやり取り
すみません。自分で思いつきました。
3.渡してもらったインタフェイスでActionを返す
確信は持てませんが、これならいい気がしてきました。質問しておいてすみません…一応解決にしました。
3.渡してもらったインタフェイスでActionを返す
確信は持てませんが、これならいい気がしてきました。質問しておいてすみません…一応解決にしました。