hayate212
3e07df6333
2022/07/15 (金) 10:10:18
何に関心(AI,メニュー遷移,etc...)を持って実装をするかで大きく構造が変わるなと思い
オブジェクトの Sprite を管理するステートマシンを実装してみました
asa さんが最初に提示した実装例から以下のようなことを考えました
- ステート内に遷移条件が実装されている
- 開発が進むにつれステート内部が複雑になっていきそう
- ステート内に挙動とアニメーション管理が実装されている
- 前方への攻撃アニメーションを再生しつつ後退する場合、後退が行われた瞬間に攻撃アニメーションはキャンセルされる?
- 場合によっては前方への攻撃アニメーションを残しつつ後退することも考えられるので、挙動=アニメーションではないはず
- 前方への攻撃アニメーションを再生しつつ後退する場合、後退が行われた瞬間に攻撃アニメーションはキャンセルされる?
- 新たにジャンプステートを実装する場合、ジャンプしながらの横移動処理はジャンプステートにも実装される?
- 実装の重複は修正漏れ考えると避けたい・・・
そこでアニメーションの管理のみを行うステートマシンを実装しました。
以下が仕様です。
- アニメーションステート(以下ステート)は Sprite を必ずひとつ持つ
- 遷移条件構造体は遷移条件関数と遷移先のステート名を持つ
- 遷移条件関数は遷移条件を満たしたかどうかの Bool 値を必ず返す
- ステートをステートマシンに登録する際には以下の情報が必要
- ステート名
- ステート
- 遷移条件構造体の配列
- 毎ステップ、条件付きループ(for)で遷移条件構造体の配列の中から順番に遷移条件関数を実行し
true
が返った場合、遷移条件構造体の遷移先ステート名を元にステートを現在のものから置き換え、ループを抜ける - 毎ステップの最後に現在のステートから Sprite をオブジェクトに割り当てる
これにより挙動とアニメーション管理を分離出来ます。
通報 ...