2017-02-11 36 views
0

Я читал на машине GameplayKit State, а documentation явно упоминает игровой интерфейс в качестве примера использования. Я полностью понимаю концепцию, но я не уверен, как ее реализовать при использовании SpriteKit.(Apple) GameplayKit State Machine реализация с SKScene

Скажем, я хочу 3 состояния. Menu, Gameplay и Game Over - все, что отображает контент в SKScene. Класс GameScene расширяет SKScene. Поэтому невозможно превратить GameScene в конечный автомат, так как мы можем расширить один класс.

Должен ли GameScene иметь переменную для конечного автомата со ссылкой на SKScene, или есть лучшее решение? Раньше я использовал протоколы для государственных машин, что облегчает работу, но я хотел бы попробовать функциональность GameplayKit.

ответ

0

Вы на правильном пути. Добавьте переменную конечного автомата в GameScene и инициализируйте ее начальное состояние.

import SpriteKit 
import GameplayKit 

class GameScene: SKScene { 
    var stateMachine: GKStateMachine! 

    override func didMove(to view: SKView) { 
     self.stateMachine = GKStateMachine(states: [ 
      StartState(scene: self), 
      PlayingState(scene: self), 
      PausedState(scene: self), 
     GameOverState(scene: self) 
     ]) 

     self.stateMachine.enter(StartState.self) 
    } 

    override func update(_ currentTime: TimeInterval) { 
     self.stateMachine.update(deltaTime: currentTime) 
    } 
} 

Затем инициализируйте состояния, чтобы они принимали GameScene в качестве входного параметра.

import SpriteKit 
import GameplayKit 

class StartState: GKState { 
    var scene: GameScene! 

    init(scene: GameScene){ 
     super.init() 

     self.scene = scene 
    } 

    override func isValidNextState(_ stateClass: Swift.AnyClass) -> Bool { 
     return stateClass == PlayingState.self 
    } 

    override func updateWithDeltaTime(seconds: TimeInterval) { 
     self.stateMachine?.enterState(PlayingState.self) 
    } 
} 
+0

Я нашел [эта статья] (https://medium.com/swift-programming/build-tic-tac-toe-with-ai-using-swift-25c5cd3085c9#.6hyeh3v9j) объяснил 'GKStateMachine' довольно хорошо и подробно разбирается в том, чтобы вводить логику в каждое состояние. –