GKStateMaching

来源:互联网 发布:员工管理系统数组java 编辑:程序博客网 时间:2024/06/05 10:48

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



原创粉丝点击