【发布时间】:2019-02-14 03:20:18
【问题描述】:
我正在开发具有两个不同场景(MainMenu.sks 和 Settings.sks)的 SpriteKit 游戏。我也有一个 UIViewController。
用户可以从 MainMenu 点按“设置”,这会导致应用加载 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 加载 UIViewController(也通过 segue)。这样,应用程序就可以正常工作了。
我怀疑问题出在我加载 Settings.sks 的方式上。
我错过了什么?也许在退出之前卸载整个 SKView?
【问题讨论】:
-
从它的声音来看,我认为您可能对 UIViewController 顶部呈现的新 MainMenu 是正确的。你能从 UIViewController 发布代码,将你带到 MainMenu 吗?
-
发生过渡时,两个场景都将存在。 IIRC 的工作原理是旧场景成为“幕后”新场景的子节点,以允许对两者进行更新。我要做的第一件事是在没有过渡的情况下让一切正常工作,并确保您的场景没有任何保留周期导致它们保持活力。
-
@guardworkingelsepanic - 我也怀疑。我的代码只是一个简单的转场:
// Exit view self.performSegue(withIdentifier: "saveAndReturnToGame", sender: self)
标签: swift sprite-kit segue