我正在开发具有两个不同场景(MainMenu.sks和Settings.sks)的SpriteKit游戏。我也有一个UIViewController。
在MainMenu中,用户可以点击“ Settings”,这将导致应用程序加载Settings.sks场景并进行演示。
使用以下代码即可完成
:// Move to Settings.sks
let transition = SKTransition.flipVertical(withDuration: 1.0)
let loadScene = SettingsScene(fileNamed: "SettingsScene")
loadScene?.scaleMode = self.scaleMode
self.view?.presentScene(loadScene!, transition: transition)
在Settings.sks场景中,用户可以点击SKLabelNode的“更改用户名”,这会导致应用通过执行segue加载UIViewController。
UIViewController包含一个UITextField和一个UIButton。 UIButton将用户带回到MainMenu.sks。
但是,当我这样做时,就像MainMenu的新场景放在另一个场景上一样,导致该应用程序“冻结”并且不响应任何触摸手势。从nodeCount可以看到,节点增加了一倍。
一种解决方法是直接从MainMenu.sks(也通过segue)加载UIViewController。这样,该应用程序就可以正常运行。
我怀疑问题是我加载Settings.sks的方式。
我想念什么?也许在退出之前卸载整个SKView?
答案 0 :(得分:1)
执行segue将在堆栈顶部显示一个新视图。通过使用segue返回主菜单,应用程序将在UIViewController顶部创建一个新的主菜单。我无法确定您的应用为何冻结。但是我猜想当从UIViewController创建并显示一个新的主菜单时,某些属性或功能不能正常工作。
我建议平移用于到达UIViewController的序列。这样,您可以返回上一个视图并节省内存。
您需要在目标视图中写一个IBAction,在这种情况下,是主菜单:
@IBAction func unwindToMainMenu(segue: UIStoryboardSegue) {
}
然后将ctrl从UIViewController中的按钮拖到情节提要中的退出图标。您应该看到一个使用刚刚编写的IBAction unwindToMainMenu
的选项。这将创建一个放松的环境。
在此答案中可以找到完整的指南,以解开测验和多个示例:What are Unwind segues for and how do you use them?