如何正确使用协议来调用 GameViewController 的函数?

How to use protocol properly to call a GameViewController's function?

我有一个 GameScene.sks、GameScene class 和 GameViewController。我可以在不使用 sks 的情况下创建协议,但我想使用 SKScene(fileNamed: "GameScene").

当我在 GameViewController 中使用 scene.gameDelegate = self 时,viewDidload() 我收到 Value of type 'SKScene' has no member gameDelegate 错误。

我该如何克服这个问题?

protocol GameDelegate {

    func createAds()
}

游戏场景class:

class GameScene: SKScene {

    var gameDelegate: GameDelegate!

    ...

GameViewController viewDidLoad:

        if let view = self.view as! SKView? {

            if let scene = SKScene(fileNamed: "GameScene") {

                scene.scaleMode = .aspectFill
                scene.gameDelegate = self // Value of type 'SKScene' has no member gameDelegate

                gameState = .playing
                view.presentScene(scene)
            }

            view.ignoresSiblingOrder = true

        }

将局部变量 scene 初始化为 SKSceneGameScene 子class。 这看起来像:

        if let view = self.view as! SKView? {

        // change type of optionally bound constant 'scene'
        if let scene = GameScene(fileNamed: "GameScene") {

            scene.scaleMode = .aspectFill
            scene.gameDelegate = self 

            gameState = .playing
            view.presentScene(scene)
        }

        view.ignoresSiblingOrder = true

    }

还要确保 GameViewController class 符合 GameDelegate 协议并实现所有必需的接口方法。