在重新加载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完全重装(如果它是第一次运行)?

答案
  1. 检查返回类型的childNode(withName :)方法,当然它没有返回EDSpriteNodeButton类型,你在EDSpriteNodeButton类型中强制转换(as!)它。
  2. 不要强制转换childNode(withName :)的结果,而是在那里放一个警卫。

以上是关于在重新加载SKScene之前尝试使用removeAllChildren()和removeAllActions()时创建的致命错误的主要内容,如果未能解决你的问题,请参考以下文章

在页面重新加载之前执行 http 请求

从 ViewController 加载 SKScene

有没有办法在重新加载表格视图数据之前添加加载视图

Swift SKScene 在 Objective-C 项目中显示为空白

从文件加载 SKScene 而不调用 init(fileNamed:"") 的方法

UITextField 在 SKScene 上不可见