从 AppDelegate 调用 GameScene 方法(Swift 3、SpriteKit、Xcode 8)
Posted
技术标签:
【中文标题】从 AppDelegate 调用 GameScene 方法(Swift 3、SpriteKit、Xcode 8)【英文标题】:Call GameScene method from AppDelegate (Swift 3, SpriteKit, Xcode 8) 【发布时间】:2017-04-12 20:55:18 【问题描述】:我正在使用 Spritekit 和 swift 3 创建游戏,我的问题是当我尝试从 applicationWillResignActive(_ application: UIApplication)
方法内的 AppDelegate 文件中调用我的 GameScene 类(SKScene 的子类)中的 pauseGame()
方法时。
我已经尝试实例化 GameScene 类,然后以这种方式调用我的 AppDelegate 文件中的方法,虽然没有编译器错误它不起作用:
func applicationWillResignActive(_ application: UIApplication)
if let gameScene = GameScene(fileNamed: "GameScene")
gameScene.pauseGame()
我该如何解决这个问题?提前致谢。
【问题讨论】:
applicationwillresignactive 发出通知,你可以在你的游戏场景类中收听,无需在app delegate中工作 @Knight0fDragon 您应该将其发布为答案,而不是评论 @BadgerBadger 这需要我实际写一个答案,我懒得这样做 @Knight0fDragon 哈哈哈 【参考方案1】:您正在创建 GameScene 的新实例。 要暂停现有实例,您需要在 AppDelegate 中添加对它的引用。
更好的解决方案是注册 GameScene 类以在应用程序进入后台时接收通知。这是将这些类与 AppDelegate 耦合的一个很好的替代方法。
在你的 GameScene 类的 viewDidLoad() 函数中添加:
let app = UIApplication.shared
//Register for the applicationWillResignActive anywhere in your app.
NotificationCenter.default.addObserver(self, selector: #selector(GameScene.applicationWillResignActive(notification:)), name: NSNotification.Name.UIApplicationWillResignActive, object: app)
将此函数添加到 GameScene 类以响应收到的通知:
func applicationWillResignActive(notification: NSNotification)
pauseGame()
【讨论】:
我进行了编辑,将 ViewController 更改为 GameScene,出于某种原因,它以匿名方式记录了它,所以如果您想更改它,我们非常欢迎。以上是关于从 AppDelegate 调用 GameScene 方法(Swift 3、SpriteKit、Xcode 8)的主要内容,如果未能解决你的问题,请参考以下文章
从 AppDelegate 调用 navigationController
如何从 AppDelegate 调用在 ViewController 中声明的方法