1

我将向您展示我的实际代码。它具有三个元素: Helper:

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 的直接子类,那么一切正常。问题是对于我的项目,我需要帮助者,所以我不能把它排除在等式之外。有人有什么建议吗?

4

1 回答 1

1

好的。经过很长时间这样做,我找到了问题的根源。gameState的声明必须从GameScene移动到GameSceneHelper ,如下所示:

class GameSceneHelper: SKScene {

   var gameState:GKStateMachine!

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

GameScene中的惰性 var声明没有用处。然后一切正常。

于 2017-01-11T23:28:27.773 回答