状态机似乎在基于组件的体系结构中造成有害的依赖关系。
具体来说,如何在状态机和执行与状态相关的行为的组件之间处理通信?
我在哪里:
- 我是基于组件的体系结构的新手。
- 我正在制作格斗游戏,尽管我认为这并不重要。我设想我的状态机将用于切换“蹲下”,“破折号”,“阻塞”等状态。
- 我发现这种状态管理技术对于基于组件的体系结构来说是最自然的系统,但是它与我读过的技术相冲突: 用于可变行为角色的动态游戏对象组件系统它建议所有组件都激活/停用通过不断检查激活条件来检查自己。
- 我认为像“跑步”或“步行”之类的动作在状态上是有意义的,这与此处接受的响应不同:https : //gamedev.stackexchange.com/a/7934
我发现这很有用,但是模棱两可:如何在基于组件的游戏架构中实现行为?它建议有一个单独的组件,其中仅包含状态机。但是,这需要在状态机组件和几乎所有其他组件之间进行某种耦合。我不明白该如何处理耦合。这些是一些猜测:
A. 组件取决于状态机:
组件接收对状态机组件的引用getState()
,该引用返回枚举常量。组件会定期进行自我更新,并根据需要进行检查。B. 状态机取决于组件:
状态机组件接收对其监视的所有组件的引用。它查询他们的getState()
方法以查看它们的位置。C. 它们之间的某种抽象
使用事件中心吗?命令模式?D. 使用引用组件
状态模式的单独状态对象。创建了单独的状态对象,这些状态对象激活/停用一组组件。状态机在状态对象之间切换。我正在将组件视为方面的实现。他们在内部完成使该方面实现所需的一切。看起来组件应该独立运行,而不依赖其他组件。我知道一些依赖是必要的,但是状态机似乎要控制我的所有组件。