您好我已经看过很多关于此主题的问题,但似乎没有解决我的情况。当用户获胜/死亡时,我想在SKScene上呈现UIView控制器。我创建了一个PresentWinLoseViewController:UIViewController子类并将其连接到故事板。我在故事板中创建了一个从GameViewController到PresentWinLoseViewController的segue,以及从PresentWinLoseViewController返回到GameViewController的两个退出段。
以下是我如何称呼它们。在我赢得/输掉的SKScene中
func win() {
let gameVC = GameViewController()
gameVC.performSegueWithIdentifier("tryAgain", sender: self)
}
我的退出段从PresentWinLoseViewController
@IBAction func tryAgainButtonPressed(segue:UIStoryboardSegue) {
self.performSegueWithIdentifier("unwindTryAgain", sender: self)
}
但是我甚至无法做到那么远,第一个segue永远不会奏效。我一直在
Receiver (<SpriteLevelBuilder.GameViewController: 0x7ff2b5e49210>) has no segue with identifier 'tryAgain''
我做错了什么?
答案 0 :(得分:1)
对于初学者,GameViewController应该已经初始化,不需要let gameVC = GameViewController()
这是因为您的SKScene实际上是由您的GameViewController呈现的。去看看你的GameViewController,你应该在viewDidLoad()中看到SKScene的初始化过程。
由于GameViewController已经初始化,您需要做的就是从SKScene直接调用GameViewController上的performSegueWithIdentifier。
我刚刚进行了快速搜索,这个答案似乎适用于您的情况:How to call method from ViewController in GameScene
答案 1 :(得分:0)
我会这样做,方法是将你希望在同一视图控制器中放置的元素放在场景上方的一个级别上。使用UIImage视图是为新元素创建背景的好方法。然后只需创建一个显示元素的函数和一个隐藏它们的函数。对于所有UI元素.hidden = true
将隐藏元素,.hidden = false
将是显示元素的方式。以下是我的某个应用中的一些代码示例。
//this is the function that hides the settings menu
func hideSettingsMenu() {
settingsCoverImage.hidden = true
settingsTitle.hidden = true
watchButton.hidden = true
fitBitButton.hidden = true
backButton.hidden = true
classesButton.hidden = true
settingsTopBackground.hidden = true
}
//this is the function that shows the settings menu
func showSettingsMenu() {
settingsCoverImage.hidden = false
settingsTitle.hidden = false
watchButton.hidden = false
fitBitButton.hidden = false
backButton.hidden = false
classesButton.hidden = false
settingsTopBackground.hidden = false
}
通过调用这些函数它只显示或隐藏该页面的元素。我目前正致力于动画页面之间的过渡。这样做也可以让你选择添加透明度,让你的应用看起来很漂亮;)