在重新加载SKScene之前尝试使用removeAllChildren()和removeAllActions()时创建的致命错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在重新加载SKScene之前尝试使用removeAllChildren()和removeAllActions()时创建的致命错误相关的知识,希望对你有一定的参考价值。
这是我关于Stack Overflow的第一个问题,所以是啊..无论如何,我试图为我的SKScene创建一个“重新加载”按钮。为此,我创建了一个名为“EDSpriteNodeButton”的新SKSpriteNode子类。在这个子类文件中,我创建了一个协议,所以我可以从我的场景中访问一个方法。这是我的协议代码:
protocol EDSpriteNodeButtonDelegate: AnyObject {
func spriteNodeButtonPressed(_ button: EDSpriteNodeButton)
}
然后我回到我的级别场景并添加了我的自定义委托......
class Level1Scene: SKScene, SKPhysicsContactDelegate, EDSpriteNodeButtonDelegate {
然后我将我的SKSpriteNode(我用作我的按钮)的类设置为“EDSpriteNodeButton”,从我的按钮创建一个var
,然后将其设为childNode并在我的类底部调用我的方法。
var reloadSceneButton = EDSpriteNodeButton()
reloadSceneButton = self.childNode(withName: "reloadSceneButton") as! EDSpriteNodeButton
reloadSceneButton.isUserInteractionEnabled = true
reloadSceneButton.delegate = self
func reloadSceneRequested(_ button: EDSpriteNodeButton) {
self.removeAllChildren()
self.removeAllActions()
self.scaleMode = .aspectFill
self.scene?.view?.presentScene(self, transition: SKTransition.fade(withDuration: 1.0))
但是当调用reloadSceneRequested()
时,我得到一个致命的错误:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
。
有谁知道如何让我的SKScene完全重装(如果它是第一次运行)?
答案
- 检查返回类型的childNode(withName :)方法,当然它没有返回EDSpriteNodeButton类型,你在EDSpriteNodeButton类型中强制转换(as!)它。
- 不要强制转换childNode(withName :)的结果,而是在那里放一个警卫。
以上是关于在重新加载SKScene之前尝试使用removeAllChildren()和removeAllActions()时创建的致命错误的主要内容,如果未能解决你的问题,请参考以下文章
Swift SKScene 在 Objective-C 项目中显示为空白