1

私の実際のコードを紹介します。次の 3 つの要素があります。

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)
   }
}

そしてアメリカ。ここでは、そのうちの 1 つを紹介します。もう 1 つは同じ構造です。

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

Ok。これを何度も行った後、問題の原因を見つけました。次のように、 gameStateの宣言をGameSceneからGameSceneHelperに移動する必要があります。

class GameSceneHelper: SKScene {

   var gameState:GKStateMachine!

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

GameScene 内の遅延 var宣言は使用できません。その後、すべてが機能します。

于 2017-01-11T23:28:27.773 に答える