RTS游戏中的Statemachine

时间:2015-11-27 09:38:02

标签: state-machine

我正在开发RTS游戏,我希望能够构建结构,这意味着构建器将步行到目标位置,并且一旦开始构建。 我想在每个单元中实现一个状态机,可以在用户提供输入时添加状态,因为这可能会在以后单位保护位置和内容时派上用场。 我的问题是:为每个用户所有的单位创建一个状态机是否有用,或者这是一个陷阱?

1 个答案:

答案 0 :(得分:1)

状态机在游戏中很常见。

状态机是游戏中对象,NPC等行为的常用方法。

它们如此常用,它们通常由游戏引擎支持:例如:Unity

状态机陷阱可能是天真实现的资源消耗,例如:一个使用State Pattern,只有在没有相对较少的状态机同时运行时才可以,否则状态模式的资源消耗对于数千个并发状态机来说将是非常高的。

如果您确实打算同时运行数千个单独的状态机,或者需要极高的效率,则必须使用更简单的方法来实现它们:例如:嵌套的switch语句或基于表的实现examples in C

一般情况下,使用状态机的原因不仅仅是游戏。

使用状态机的主要原因是清晰地对问题进行建模:您可以通过绘制状态机来直观地考虑边缘条件,例如:通过使用GraphViz等工具或手工制作。 更准确地说,在哪种情况下会发生什么。

有时你的问题“只是调用”状态机表示:它具有“状态”和复杂的行为,这取决于过去的事件。

国家机器背后有数十年的计算机科学研究,有关分析它们,简化它们等的算法是众所周知的。

如果您尝试通过手动添加和删除IF语句来建模状态机,you will end up with messier code,您将无法进行转换,建模等。

在“缺点”方面,如果使用基于表的状态机,调试它们会有点困难。