首页 > 解决方案 > 初始化节点时找不到值

问题描述

我是一个初学者程序员。请帮忙。展开 childNode 时找不到值。不知道为什么。请帮忙,谢谢我的代码:

var someParentNode = SKSpriteNode()
var someChildNode = SKSpriteNode()
override func didMove(to view: SKView) {
someParentNode = self.childNode(withName: "someParentNode") as! SKSpriteNode
someChildNode = self.childNode(withName: "someChildNode") as! SKSpriteNode

问题:在展开 childNode 时出现错误(在最后一行):

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

不知道为什么它是一个错误。就像节点名称所暗示的那样,childNode 是 someParentNode 的父节点。请帮忙。提前致谢 :)

标签: iosswiftsprite-kitskspritenode

解决方案


该代码someParentNode = self.childNode(withName: "someParentNode") as! SKSpriteNodeself.childNode(withName: "someParentNode")查找名称为“someParentNode”的 SKNode。请记住,这是您可以分配给节点的名称,如someNode.name = "xyz". 它不引用行中的变量名称var someParentNode = SKSpriteNode()。这是两个不同的东西。

由于没有节点 where node.name == "someParentNode",函数self.childNode(withName: "someParentNode")返回nil。然后你用 强制解包as!,导致错误。

您不需要调用someParentNode = self.childNode(withName: "someParentNode") as! SKSpriteNodein didMove,因为您已经在第一行创建了一个新的SKNode并分配了这个新SKNode的。someParentNode因此不再需要为其分配新节点。

如果您仍想按名称查找节点,请someParentNode.name = "someParentNode"在调用之前执行此操作self.childNode(withName: "someParentNode"),但这不是必需的,因为如上所述,您已经创建并分配了一个SKNode新到someParentNode. 此外,由于您someParentNode在任何函数之外声明,它在您的 SKScene 中具有全局范围,因此您可以在该场景的任何方法中访问它。因此,无需使用方法来查找节点,因为您始终可以访问场景中的该节点。

希望这可以帮助!同样的道理适用于someChildNode


推荐阅读