无法在ViewController和SKScene之间设置委托

时间:2019-01-22 19:18:43

标签: delegates viewcontroller skscene

我想在我的GameViewController和SKScene文件之间设置委托,但遇到错误。我的目标是从SKScene文件中调用方法。

错误是:类型'GameScene'的值没有成员'gameViewControllerDelegate'

我在做什么错了?

预先感谢

MainSC.swift

import UIKit
import SpriteKit
import Firebase
import StoreKit
import GoogleMobileAds

class MainVC: UIViewController, GameViewControllerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()

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

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

                //THIS GUY THROWING ERROR
                 gameScene.gameViewControllerDelegate = self 

                gameScene.scaleMode = .aspectFill
                gameScene.size.width = 414
                gameScene.size.height = 736
                view.presentScene(gameScene)

            }

            view.ignoresSiblingOrder = true

            view.showsFPS = true
            view.showsNodeCount = true
            view.showsPhysics = true

        }
    }
func callMethod(inputProperty:String) {
        print("inputProperty is: ",inputProperty)
    }
}

MainSC.swift

import UIKit
import SpriteKit
import GameplayKit
import Firebase
import GoogleMobileAds

protocol GameViewControllerDelegate : class {
    func callMethod(inputProperty:String)
}

class MainSC: SKScene {

    weak var gameViewControllerDelegate : GameViewControllerDelegate?

override func didMove(to view: SKView) {

       ...

       gameViewControllerDelegate?.callMethod(inputProperty: "call game view controller method")

    }

}

1 个答案:

答案 0 :(得分:1)

您没有在MainVC中将gameViewControllerDelegate委托设置为self,所以如何调用该SKscene的委托。因此在MainVC中将其设置为self