什么是状态
状态是一组条件和与之相伴的行为。
例如饿了→找吃的、有敌人→追击这样。
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()
就可以了。
这其实算状态机的其中一种实现方法。
分层有限状态机
欸,如果我把状态机本身打包成一种状态会怎么样?——这就产生了分层有限状态机!
非常简单对吧?分层有限状态机很强大,你可以用它来设计游戏流程:
如图所示,状态的划分使得我们只用专心写各个状态的代码,可以大大减少游戏逻辑的书写难度,使得复杂的游戏设计变为可能。