1636201j59xun76uvvuul0.png
  恭喜,你已经创建了一个有限状态机(FSM)。这出自计算机科学的一个叫做自动机理论的分支。这个家族里里还有大名鼎鼎的图灵机。FSM是这个家族最简单地一个成员。要点如下:

  1、状态机的状态集合是确定的。例如在我们的例子里,有站立、跳跃、下蹲和俯冲。

  2、状态机在某一时刻只能处于一种状态。我们的heroine不能同时跳跃和站立。其实,避免出现这种状况正是我们使用FSM的原因。

  3、一连串的输入或者事件发送到这个状态机。我们的例子里,就是一串按键和释放消息。

  4、每一种状态都由一些转化路径,每一个路径都通过一个输入关联到另外一种状态。当一个输入进来后,如果正好跟一个当前的转化路径匹配,状态机就会转到它所指向的另一个状态。

  例如,站立的时候按向下键,转换到下蹲状态,跳跃的时候按向下键,转换到俯冲状态。如果当前状态下没有定义某种操作相应的转化,那这种操作将会被忽略。

  理想状态下,状态机里就只有:状态,输入,转化这些东西了。你可以画一个很小的图表示出来。但是编译器并不能识别我们的草图,我们要怎么实现他们呢?GOF的State模式就是一种方法,下面将会讲到,让我从简单的入手。

  枚举与开关

  我们的Heroine类有一个问题就是无法使用这几个布尔值得组合,例如isJumping_和isDucking_永远不可能都为true。当你确定这些标志不可能同时为true时,这就表示你真正应该使用的是枚举。

  在这个例子中,枚举就是我们FSM的状态集合,所以我们可以这样定义:

 

  1. enum State{
  2. STATE_STANDING,
  3. STATE_JUMPING,
  4. STATE_DUCKING,
  5. STATE_DIVING
  6. };

  这正是我们开火所需要的。我们只需要创建一个开火状态。当在其他状态下开火键被按下时,我们把开火状态压入到栈中。等到开火动作结束后,我们弹出这个状态,然后下推自动机会自动得帮我们把状态转换到原有状态上。

  那么他们有用吗?

  即使那些扩展过的状态机,也有很多限定条件。当今游戏AI发展趋势是那些更吸引人的东西,如行为树,计划系统。如果你对更复杂的AI感兴趣,本章的内容旨在唤起你的兴趣。你需要阅读其他书籍来满足你的需求。

  这不说明有限状态机,下推自动机,和其他简单系统没有用。他们是对一些特定的问题是一个很好的模型工具。有限状态机在下面的情况下比较有用。

  1、你有一个东西,它的行为是基于一些内部状态的。

  2、这些状态能够很容易地分离出少量明确的选项。

  3、随着时间变化,这个东西要相应一系列输入和事件。

  在游戏中,最有名的用法是在AI中。而在其他用法也很常见,如处理用户输入,菜单导航,解析文本,网络协议,以及一些其他异步行为。

Wantgame编译 【原译文

相关阅读:游戏服务端究竟解决了什么问题?锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛