对于有限状态机
的知识,这里推荐浅墨毛星云大佬的博客【游戏设计模式】之三 状态模式、有限状态机 & Unity版本实现,博客里做了具体的代码讲解。
状态机
是表示有限个状态
以及在这些状态之间的转移
和动作
等行为的数学模型。有限状态机
是其中最简单的成员。
以下是我看了该博客之后的一点心得:
对于有很多状态切换的功能,我们可能会不假思索的使用if-else
直接把所有可能的情况都列举出来,这样会产生一大堆代码,并且因为漏掉某个细节,然后又修补bug,添加代码,进而就会破坏代码结构。
这种方式明显不可取。
虽然if-else
和switch-case
有时候可以通用,但是某些时候,输入不是表达式或者是没有定义成枚举型的,所以这种情况下就使用if-else
,例如if(num>5)
你定义成什么东西转化成switch-case
?如果刻意定义成bool转化成switch-case
反而会更麻烦。
而switch-case
只能是针对"表达式",例如数字、枚举和bool型,case 3:
、case KEY_UP:
、case true:
。
-
我们一般思维就是,输入来了什么动作,我们就根据这个输入动作,来具体分析这个输入动作在各种状态下分别做什么处理,可能会需要使用很多的
bool
型的状态值(如果你使用了枚举定义这些状态值,就不需要这些bool状态值了),这是if-else
的做法。 -
但是,我们可以换一种思维方式,
先判断当前是在什么状态(多种状态值可以定义成枚举型)下,然后再根据输入动作来进行相应的处理
,可能会简洁高效很多。这就是switch-case
的方法。
两种方法你自己实践一下,在相对复杂的状态切换操作下,我们要想一下,怎样的逻辑会使得代码更简洁,然后搭配switch-case
使用,代码肯定可以更简洁。
至于浅墨大佬博客最后讲解的状态模式
,博客中我没有看得很明白,就不做记录了。