什么是状态

状态是一组条件和与之相伴的行为。

例如饿了找吃的有敌人追击这样。

while True:
	if hugry:
		eat()
		...
	elif notice_enemy:
		attack()
		...

我们可以设计一种结构,让其自动管理状态和处理状态的生命周期。

有限状态机 Finite State Machine

直接上代码

class State:
    """ 定义什么是状态 """
   def enter():
   	 # 处理状态开始
   	 pass
   def exit():
   	# 处理状态结束
   	pass
   # 行为
   def update(_delta: float):
   	pass
   def physics_update(_delta: float):
   	pass

这段定义了一个抽象的状态——什么是状态。

在游戏中,会实际地重写这个类,例如

class Idle(State):
	def Physics_Update(_delta: float):
		# 随机走动

然后可以写一个状态机来管理状态

class StateMachine:
    # 这个状态机的所有状态
    states: dict = {
   	 "eat": Eat,
   	 "idle": Idle,
   	 ...
    }
    # 当前状态
    current_state: State
    # 改变当前状态
   def transition(state_name):
   	 current_state.exit()
   	 states[state_name].enter()
   # 进行状态
   def update(_delta: float):
   	current_state.update()
   def physics_update(_delta: float):
   	current_state.physics_update()

然后只需要在游戏中物体的Update函数调用StateMachine.update()就可以了。

这其实算状态机的其中一种实现方法。

分层有限状态机

欸,如果我把状态机本身打包成一种状态会怎么样?——这就产生了分层有限状态机

非常简单对吧?分层有限状态机很强大,你可以用它来设计游戏流程:

如图所示,状态的划分使得我们只用专心写各个状态的代码,可以大大减少游戏逻辑的书写难度,使得复杂的游戏设计变为可能。