ページ 11

ゲームの流れの実現と状態間のメッセージのやり取り

Posted: 2016年5月29日(日) 23:55
by moba
 お世話になります_(._.)_
 僕は誤解の塊で、手間がかかると思います…。

 ゲームの「流れ」をなるべく状態遷移で実現したいです。そのための状態間のメッセージのやり取りで困っています。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: ゲームの流れの実現と状態間のメッセージのやり取り

Posted: 2016年5月30日(月) 17:07
by moba
すみません。自分で思いつきました。

3.渡してもらったインタフェイスでActionを返す

確信は持てませんが、これならいい気がしてきました。質問しておいてすみません…一応解決にしました。