gpt4 book ai didi

ios - 为什么我的 ViewController 在重新打开后不显示另一个 SKScene?

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:30 26 4
gpt4 key购买 nike

所以现在我正在编写一个游戏,我遇到了一个我没有真正找到解决方案的问题。我会尽力为您描述。

所以,为了能够更好的说明我的问题,我画了一张示意图给大家:

Schematic drawing

现在问题来了:我有两个 View Controller,一个叫做 MenuVc,另一个叫做 GameVC。在 GameVC 中,我有一个 SKView,它在调用 didMoveToView 时显示特定的 SKScene,名为 GameSceneGameScene 有一个 didBeginContact 方法,然后它将移动到 SKView 拥有的另一个 SKScene,称为 GameOverScene,代码如下(图中的 Segue 1):

let reveal = SKTransition.crossFadeWithDuration(0.5)
let gameOverScene = GameOverScene(size: self.size, won: false)
self.view?.presentScene(gameOverScene, transition: reveal)

从这里,用户可以返回到 GameScene 以重新启动游戏(图中的 Segue 2)。在 GameScene 上,还有另一个按钮,它允许您通过 NSNotificationCenter 事件返回到 MenuVC(图中的 Segue 3) .代码如下:

在 GameViewController.swift 中:

override func awakeFromNib() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "goToMenuViewController:", name: "GoToMenuViewController", object: nil)
}

@objc func goToMenuViewController(notification: NSNotification){

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("MenuVC")
vc.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve

self.presentViewController(vc, animated: true, completion: nil)

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

在 GameScene.swift 中,按下后退按钮时:

NSNotificationCenter.defaultCenter().postNotificationName("GoToMenuViewController", object: self)

因此,如果我现在想使用 MenuVC 上的按钮返回到 GameVC(图中的 Segue 4),一切正常。 GameVC 中的 SKView 再次显示 GameScene,但是现在调用 didBeginContact() 时,它不会呈现 GameOverScene。该函数被调用,我检查了它,它也执行了其中的代码,但它没有按预期执行 segue (1)。你知道我为什么要改变以及我必须改变什么吗?调用 Segue 3 时是否与 deiniting 有关?

GameVCviewDidLoad 代码:

let scene = GameScene(size: view.bounds.size)
let skView = view as! SKView
skView.ignoresSiblingOrder = true
scene.scaleMode = .ResizeFill
skView.presentScene(scene)

Segue 4 代码:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("GameVC")
vc.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve
self.presentViewController(vc, animated: true, completion: nil)

最佳答案

确保在尝试呈现其他 View Controller 之前关闭每个 View Controller 。

如果你试图在另一个已经呈现的 View Controller 之上呈现一个 View Controller ,我不认为 UIKit 真的喜欢它。

关于ios - 为什么我的 ViewController 在重新打开后不显示另一个 SKScene?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33352475/

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