初始化节点时找不到值

Posted

技术标签:

【中文标题】初始化节点时找不到值【英文标题】:Can't find the value when initialising a node 【发布时间】:2018-05-12 13:26:22 【问题描述】:

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

【问题讨论】:

首先你不应该强制展开,学习如何正确地实现展开。其次,我们无法帮助您确定为什么 self.childnode(... 从您提供的代码中返回 nil。返回值为 nil 的原因可能有多种。 您是否检查过名称是否正确,包括小写/大写? 【参考方案1】:

代码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! 进行强制解包,导致错误。

您不需要在didMove 中调用someParentNode = self.childNode(withName: "someParentNode") as! SKSpriteNode,因为您已经创建了一个新的SKNode 并在第一行将这个新的SKNode 分配给了someParentNode。所以没有必要再给它分配一个新节点了。

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

希望这会有所帮助!同样的道理也适用于someChildNode

【讨论】:

@swiftBeginner 不客气。如果对你有帮助,请采纳答案。谢谢!

以上是关于初始化节点时找不到值的主要内容,如果未能解决你的问题,请参考以下文章

通过桌面图标运行 bash 脚本时找不到节点命令

运行不和谐机器人时找不到模块“节点:事件”错误

错误:使用节点命令运行 JS 文件时找不到模块“firebase”

“错误:在 react-redux 项目中安装节点包时找不到模块'internal/util/types'”

运行程序时找不到主类

生成消息时找不到主题:UNKNOWN_TOPIC_OR_PARTITION