如何正确使用协议来调用 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
初始化为 SKScene
的 GameScene
子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
协议并实现所有必需的接口方法。
我有一个 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
初始化为 SKScene
的 GameScene
子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
协议并实现所有必需的接口方法。