gpt4 book ai didi

ios - 使用带有 SkScene 的 NSNotificationCenter 到 UIViewController

转载 作者:可可西里 更新时间:2023-11-01 00:38:01 27 4
gpt4 key购买 nike

我正在使用 SpriteKit 使用 Swift 制作游戏。

我正在使用界面生成器来定位我所有的按钮(菜单、重试等),这样我就可以使用自动布局。然后,我在游戏结束函数中使用 NSNotificationCenter 在 SKScene 中显示这些按钮。我可以毫无问题地使用 NSNotificationCenter 在 SKScene 中显示 UIKit 内容。

这是我的问题,我会尽力解释。

当您游戏结束时,会显示一个名为 retry 的 UIButton。我在 SKScene 中为重试函数设置了一个 NSNotificationCenter 观察器,并在 IBAction 中为 viewController 中的按钮调用了 postNotificationName。当我第一次加载游戏时,通知效果很好。我可以玩、重试、玩、重试。

但是,当我返回主菜单并再次加载游戏并按下重试时,游戏崩溃了。有时它只是 (lldb)。其他时候,它无法识别的选择器发送到实例。

这是我目前的代码:这是 View Controller

class GameSceneViewController: UIViewController{

@IBOutlet weak var homeBtn: UIButton!
@IBOutlet weak var retryBtn: UIButton!

var userDefaults = NSUserDefaults.standardUserDefaults()

//MARK: Button Actions
@IBAction func returnToMenu(sender: UIButton) {

self.dismissViewControllerAnimated(true, completion: nil)
}

@IBAction func retryGame(sender: UIButton) {

NSNotificationCenter.defaultCenter().postNotificationName("retrygame", object: nil)

}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)

var scene: GameScene!
let skView = view as SKView
skView.showsFPS = false
skView.showsNodeCount = true
skView.showsPhysics = false

skView.ignoresSiblingOrder = true

scene = GameScene(size: skView.bounds.size)
scene.scaleMode = .AspectFill

skView.presentScene(scene)

}

这是游戏场景:

class GameScene: SKScene {

//MARK: The View
override func didMoveToView(view: SKView) {

self.backgroundColor = UIColor.grayColor()
setUpGame()

NSNotificationCenter.defaultCenter().addObserver(self, selector: "retry", name: "retrygame", object: nil)

}

func retry(){

print("test")
}

为什么会这样?为什么观察者首先为第一场比赛工作,但在我离开并返回 View 后失败?如果您需要更多信息,请发表评论。非常感谢任何帮助!

最佳答案

当对象被取消初始化时,您需要从 NSNotificationCenter 中删除作为观察者的 GameScene。

下面的代码应该可以解决您的问题。

deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}

关于ios - 使用带有 SkScene 的 NSNotificationCenter 到 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27652274/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com