初始化节点时找不到该值

时间:2018-05-12 13:26:23

标签: ios swift sprite-kit skspritenode

我是初学程序员。请帮忙。在展开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的父节点。请帮忙。在此先感谢:)

1 个答案:

答案 0 :(得分:0)

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

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

您不需要在someParentNode = self.childNode(withName: "someParentNode") as! SKSpriteNode中致电didMove,因为您已经创建了新的SKNode,并将此新SKNode分配给someParentNode在第一行。因此,不再需要为其分配新节点。

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

希望这有帮助!同样的推理适用于someChildNode