gpt4 book ai didi

ios - 无法使用 Xcode 8 和 Swift 3 以编程方式在 SpriteKit 中触发 segue

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:20 24 4
gpt4 key购买 nike

我正在使用 SpriteKit 在 Xcode 8 中制作游戏,并且一直很难以编程方式触发 segue。我已经进入“Main.storyboard”并在我的“GameViewController”和“MenuViewController”之间进行了转换,给它标识符“toMenu”。

失败的尝试 #1

在我的 GameScene.swift 文件中,我已将以下代码添加到更新函数中。

override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered

if gameIsRunning == false{
score = 0
performSegue(withIdentifier: "toMenu", sender: self)
}
}

我的目标是在 gameIsRunning 为 false 时触发 segue。但是,我收到以下错误:

Use of unresolved identifier 'performSegue'

这很奇怪,因为 performSegue 是根据 API Reference 的声明.

失败的尝试 #2

我试过了 this solution通过将以下代码放入“GameScene.swift”

override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered

if gameIsRunning == false{
score = 0
GameScene(MenuViewController, animated: true, completion: nil)
}

我得到了这个错误:

Type of expression is ambiguous without more context

失败的尝试 #3

我找到了 this solution非常困惑,但我还是跟着。我已经完成了第 1 步,因此如第 2 步所述,我将以下代码放在“GameViewController.swift”的底部

func goToDifferentView() {

self.performSegue(withIdentifier: "toMenu", sender: self)

}

并且没有收到错误!然后我按照解决方案第 3 步中的说明将此代码添加到“GameViewController.swift”

    override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(goToDifferentView), name: NSNotification.Name(rawValue: "toMenu"), object: nil)

然后我执行了解决方案的第 4 步,所以我将以下代码放入“MenuViewController.swift”

    override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.post(NSNotification(name: NSNotification.Name(rawValue: "toMenu"), object: nil) as Notification)

然后我将以下代码放入我的“GameScene.swift”文件中以实际调用该函数。

    override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered

if gameIsRunning == false{
score = 0
GameViewController().goToDifferentView()
}

然后我在我的 iPhone 上运行我的游戏,一切顺利,直到我到达 gameIsRunning 变为 false 的游戏部分。我得到了以下错误,而不是 segue 做它的事情:

Thread 1: Signal SIGABRT

这个错误我遇到过好几次了,而且一直是我在“Main.storyboard”中连接不正确。然而,这是一个非常简单的游戏,一切看起来都很正常。在添加我刚刚向您展示的代码之前,我也没有收到此错误。我已经多次确认 segue 具有标识符“toMenu”。我完全不知道为什么 segue 不起作用以及为什么我的 Attemp #3 导致 SIGABRT 错误。

最佳答案

由于您试图在 update() 函数中触发此 segue,它每秒被调用多次。试试下面的代码,它应该可以工作。

override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered

if gameIsRunning == false{
score = 0
gameIsRunning = true
NotificationCenter.default.post(NSNotification(name: NSNotification.Name(rawValue: "toMenu"), object: nil) as Notification)
}

如果您将 print("update") 放在您的 if 语句中,您就会明白我的意思。在您的 if 中将 gameIsRunning bool 值设置为 true 将确保它只被调用一次。

关于ios - 无法使用 Xcode 8 和 Swift 3 以编程方式在 SpriteKit 中触发 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43174357/

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