エンティティの状態がenter()、execute()、exit()を完全に利用しない場合の設計上の欠陥はありますか?


9

私はMat BucklandのプログラミングゲームAIの例をフォローしていますが、エンティティの状態で常にenter()、execute()、exit()を使用する必要はありません。たとえば、RPGでは、武器に装備状態がある場合があり、その状態に対してenter()およびexit()を使用して、プレーヤーの能力モディファイアに加算または減算することができますが、実際にはexecute()の必要はありません)。これは私のエンジンの設計上の欠陥ですか、それともこのアプローチの欠点ですか?

回答:


8

本を読んでいないので、これらの呼び出しは、ステートマシンの通常のエントリポイントのように聞こえます。呼び出しを理解するために、それらが何をするか見てみましょう。

enter() -状態がアクティブになったときに実行されます。

execute() - 状態がアクティブ化されているに実行されます。

exit() -状態が非アクティブ化されたときに実行されます。

これらはあらゆる種類のステートマシンに適合します。一部のマシンは「実行」呼び出しのみを必要とし、他のマシンは「入力」と「終了」を必要とし、さらに他のマシンは3つすべてを必要とします。

例1:機関銃の引き金。

  • 実行:設定された速度で弾丸を発射します。

例2:強制ブリッジ

  • 入力:ブリッジを表示する
  • 終了:橋を消す

例3:個人用パワーアーマー。

  • 入力:プレーヤーに追加の保護を与える
  • 実行:電池を消耗させる
  • 終了:余分な保護を削除します

8

これは必ずしも欠陥の兆候ではありません。すべてのエンティティまたは州がすべての利用可能な方法を使用するわけではありません。execute()メソッドを空のままにするだけで十分です(IMO)。

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