2017-01-11 13 views
1

실제 코드를 보여 드릴 것입니다. 도우미 :서브 클래스의 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") 
    } 
} 

문제는 내가 GameSceneHelper의 서브 클래스 내부의 gameState 변수를 정의 할 때 나는 누출을 얻고 있다는 것입니다 : 다른 하나는 동일한 구조를 가지고있다. 그러나 하위 클래스를 사용하지 않고 대신 GameScene을 SKScene의 직접 하위 클래스로 만들면 모든 것이 작동합니다. 문제는 내 프로젝트에 도움이 필요하므로 방정식에서 벗어날 수 없다는 것입니다. 아무도 제안이 있습니까?

답변

1

확인. 이 작업을 수행하는 데 많은 시간을 쏟은 후 문제의 원인을 발견했습니다. gameState의 선언은 다음과 같이 GameSceneHelperGameScene에서 이동해야합니다 :

class GameSceneHelper: SKScene { 

    var gameState:GKStateMachine! 

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

GameScene 내부 게으른 VAR 선언 사용하지 않음. 모든 것이 작동합니다.