GKStateMaching
一个有限状态机集合,包含有特定逻辑和规则去处理逻辑间的过渡。
概括
在Gameplaykit框架中,GKState的子类定义了每一种状态和状态间过渡的规则,使用了GKStateMachine实例可以去集中管理每一个独立的状态。这个状态机系统提供了方法,可以规划安排那些状态依赖的行为,当进入某个状态时,离开某个状态时,或者周期性实现某个状态逻辑(例如不同状态播放不同帧动画)。
你可以用GKStateMachine来控制各种类型的游戏,比如:
• 一个敌人角色可能会使用状态机拥有追逐,逃跑,死亡或者重生的状态,每一种状态控制一种行为,每种状态的过渡由玩家的行为改变或者时间的流逝所改变。
• 使用状态机来控制游戏的菜单开始,暂停,失败等状态,其中每个决定哪些UI元素显示和其他游戏元素运行。
构建一个状态机GKStateMachine,首先要定义明确的GKState状态子类来构建每一种可能发生的状态,在每个状态类中isValidNextState: 方法决定了哪些状态可以进行过渡。然后,通过构造GKState状态类的实例并将它们传递给创建状态机中列出的方法之一,创建一个状态机对象。最后设置一个motion来选择一个最初的状态,使用enterState:
方法进行设置。
定义状态依赖的行为,在每一个GKState子类中重写didEnterWithPreviousState: 方法,updateWithDeltaTime: 方法和willExitWithNextState: 方法。
• 状态机会在一个状态改变时通知当前GKState实例,使用didEnterWithPreviousState: 和willExitWithNextState: 方法在状态改变时执行行为。例如,进入“逃离状态”的敌方人物可能会改变其外观,以表示被玩家工具。
• 当你使用一个状态的updateWithDeltaTime: 方法时,状态机也会对当前状态的updateWithDeltaTime: 发送消息,使用这个方法更新每一帧的代码。例如,追击状态中的敌方人物可以更新其位置以追击玩家,逃离状态的敌人可以更新其位置以躲避玩家。
Topics
创建状态机(Creating a State Machine)
- initWithStates:
通过特定的状态数组创建状态机。+ stateMachineWithStates:
通过特定的状态数组创建状态机。
与状态相关的方法(Working with States)
currentState
状态机中当前的状态。
- canEnterState:
返回一个布尔值,判断是否能是一个有效状态可以过渡。
- enterState:
状态机尝试从当前状态过渡到指定状态。
- stateForClass:
通过指定类型返回相对应的状态。
- updateWithDeltaTime:
当前状态对象调用的updateWithDeltaTime: 方法。
关系
继承
NSObject