Как передать параметры используя состояния GKStateMachine - PullRequest
0 голосов
/ 22 октября 2018

При входе в состояние я хочу передать параметры с состоянием следующим образом:

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 голосов
/ 27 ноября 2018

Если вы отслеживаете состояния машины состояний, вы можете установить параметр перед входом в состояние.Я не совсем уверен, что это потокобезопасный, я буду обновлять, как я буду тестировать дальнейшее использование.

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

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

в этом случае параметр AlienState «relatedAlienName» может быть установлен перед входом в состояние

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

Класс AlienState, alienWaitState является подклассом

class AlienState: GKState {  
    weak var game:GameScene?
    var associatedAlienName:String?  
    ....
0 голосов
/ 22 октября 2018

Вы не передаете параметр таким образом.В вашем текущем состоянии есть функция.

func willExit(to nextState: GKState)

Вы можете передавать параметры как nextState.userinfo[score] = 111

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...