ゲーム プレイヤーが移動できる多数のスイッチ スプライトを持つゲームを書いています。
「Game-play-kit」ステート マシンを使用してコードを整理するつもりでした。
複数のステート マシンを管理する方法がわかりません。具体的には、スイッチを配列に格納し、各スイッチ オブジェクトにステート マシンが含まれてい
ます。プロパティを変更するために、GKState クラス内から「親」スイッチを参照するにはどうすればよいですか (この場合、新しいアニメーションを実行していますか?)
これは私のスイッチクラスです:
class RailSwitch: SKSpriteNode {
var switchID: Int
var currentSwitchPosition: switchPosition
var initialSwitchPosition: switchPosition
var switchLocation: CGPoint
var isSwitchLocked: Bool
var isLeftMiddleSwitch: Bool
var currentAnimation: switchAnimation /* this is a dictionary of animation textures */
var stateMachine : GKStateMachine! 
init(switchID: Int,
     switchLocation: CGPoint,
     initialSwitchPosition: switchPosition,
     isSwitchLocked: Bool,
     isLeftMiddleSwitch: Bool,
     currentAnimation: switchAnimation,
     texture:SKTexture!) {
    self.switchID = switchID
    self.switchLocation = switchLocation
    self.initialSwitchPosition = initialSwitchPosition
    self.currentSwitchPosition = initialSwitchPosition
    self.isSwitchLocked = isSwitchLocked
    self.isLeftMiddleSwitch = isLeftMiddleSwitch
    self.currentAnimation = currentAnimation
    super.init (texture: texture!, color: UIColor.clearColor(), size: texture!.size())
}
required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
これは私のスイッチネットワーククラスです:
class SwitchNetwork {
var level : Int
var switchNetwork = [RailSwitch]()
var railSwitchAnimation : [switchAnimationState: switchAnimation]
init (level:Int) {
    self.level = level
    self.switchNetwork = []
    self.railSwitchAnimation = [:]
}
func initialiseSwitches() {
    /* one test example switch - in practice there will be many*/
    railSwitchAnimation = loadSwitchAnimations()
    switchNetwork.append(RailSwitch(switchID: 1,
        switchLocation: CGPointMake(400,300),
        initialSwitchPosition: (.left) ,
        isSwitchLocked: false,
        isLeftMiddleSwitch: true,
        currentAnimation: railSwitchAnimation[.left]!,
        texture: railSwitchAnimation[.left]!.textures[0]
        ))
}
GameScene 内から切り替えを開始します。
func initiateSwitchNetwork() {
    for thisSwitch in 0 ... switches.switchNetwork.count - 1 {
        switches.switchNetwork[thisSwitch].stateMachine = GKStateMachine(states: [
            GameStart(scene: self),
            SwitchLeft(scene: self),
            SwitchRight(scene: self),
            SwitchMiddle(scene: self),
            SwitchLeftLocked(scene: self),
            SwitchRightLocked(scene: self),
            SwitchMiddleLocked(scene: self)])
        switches.switchNetwork[thisSwitch].stateMachine.enterState(GameStart)
    }
これが私の質問です。
switch statemachine gkstate クラスの中から、アニメーションを変更するのは誰ですか? 
ステートマシンを保持する親スイッチ オブジェクトに何らかの方法でアクセスする必要がありますか?
class GameStart: GKState {
    unowned let scene: GameScene
    init(scene: SKScene) {
        self.scene = scene as! GameScene
        super.init()
    }
    override func didEnterWithPreviousState(previousState: GKState?) {
        // scene.addChild(scene.switches.switchNetwork[0].currentAnimation.textures[0])
    }
}