如何使用GKStateMachine的状态传递参数

时间:2018-10-22 02:27:33

标签: ios swift state-machine

进入状态时,我要传递状态如下的参数:

playerStateMachine.enter(pauseState.self,[“ score”:123,“ rank”:1])

所以我可以在didEnter方法中获得该值,如下所示:

class pauseState: GKState {
    var userinfo:[String:Any]?

    init(player: SSGameDelegate) {
        super.init(player: player)
    }

    override func didEnter(from previousState: GKState?) {
        super.didEnter(from: previousState)
       //Access input value here
       print(userinfo["score"])
       print(userinfo["rank"])

    }

}

2 个答案:

答案 0 :(得分:0)

您不会以这种方式传递参数。在您当前的状态下,有一个功能。

func willExit(to nextState: GKState)

您可以在此处以nextState.userinfo[score] = 111的形式传递参数

答案 1 :(得分:0)

如果您跟踪状态计算机状态,则可以在进入状态之前设置参数。我不确定这是否是线程安全的,我将在我进一步测试用法时进行更新。

let alienWaitState = AlienWaitState(game: self)
let alienFlyingState = AlienFlyingState(game: self)

aliensStateMachine = GKStateMachine(states: [
  alienWaitState,
  alienFlyingState,
  AlienAnimateOffState(game: self),
  AlienDeadRemovalState(game: self)
])

在这种情况下,可以在输入状态之前设置AlienState参数“ associatedAlienName”

alienWaitState.associatedAlienName = newAlien.name
aliensStateMachine.enter(AlienWaitState.self)

AlienState类,AlienWaitState是一个子类

class AlienState: GKState {  
    weak var game:GameScene?
    var associatedAlienName:String?  
    ....