2017-01-11 22 views
1

Я покажу вам мой фактический код. Она состоит из трех элементов: Helper:Утечки с использованием GKStateMachine в подклассе

import SpriteKit 
import GameplayKit 

class GameSceneHelper: SKScene { 

    override func didMove(to view: SKView) { 

    } 
} 

подкласс хелперов с состояниями некоторых игр:

import SpriteKit 
import GameplayKit 

class GameScene: GameSceneHelper { 

    lazy var gameState:GKStateMachine = GKStateMachine(states: [ 
     Introduction(scene: self), 
     SecondState(scene: self) ]) 

    override func didMove(to view: SKView) { 

     self.gameState.enter(Introduction.self) 
    } 
} 

И государство. Здесь я представляю один из них. Другой имеет ту же структуру:

import SpriteKit 
import GameplayKit 

class Introduction: GKState { 

    weak var scene:GameScene? 

    init(scene:SKScene) { 
     self.scene = scene as? GameScene 
     super.init() 
    } 

    override func didEnter(from previousState: GKState?) { 
     print("INSIDE THE Introduction STATE") 
    } 
} 

Проблема заключается в том, что я получаю, когда я Течь определить переменную GameState внутри подкласса GameSceneHelper. Но, если я не использую подкласс, и вместо этого я делаю GameScene прямым подклассом SKScene, все работает. Проблема в том, что для моего проекта мне нужен помощник, поэтому я не могу вынести его из уравнения. Есть ли у кого-нибудь предложения?

ответ

1

Хорошо. После большого количества времени я нашел источник проблемы. Декларация GameState должна быть перемещена из GameScene к GameSceneHelper как это:

class GameSceneHelper: SKScene { 

    var gameState:GKStateMachine! 

    override func didMove(to view: SKView) { 
    } 
} 

Не использовать для ленивого вара декларации внутри GameScene. Тогда все работает.