2016-12-12 99 views
1

我有一个GameScene.sks,GameScene类和Ga​​meViewController。我可以创建一个协议,而不使用sks,但我想用SKScene(fileNamed: "GameScene")来完成。如何正确使用协议来调用GameViewController的函数?

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

我该如何克服这个问题?

protocol GameDelegate { 

    func createAds() 
} 

GameScene类:

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 

     } 

回答

3

初始化局部变量scene为您GameScene子类SKScene。 这看起来是这样的:

 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类符合GameDelegate协议并实现所有必需的接口方法。

+0

谢谢,我没有尝试过很多东西。你节省了我的时间。 – tobeiosdev

+0

@tobeiosdev绝对,很高兴我能帮上忙。 –

相关问题