在SpriteKit SWIFT中获取SKReferenceNode的子节点

6
我创建了一个场景Case.sks(使用级别编辑器),其中包含一个SKSpriteNode(名称:square)和一个SKLabel(名称:label)。 在我的主场景GameScene.sks中,我使用一个名为“Case”的SKReferenceNode进行引用。 我需要从我的主场景访问“square”精灵。 我的第一个想法是直接调用子节点:
 let firstSquare = childNode(withName: "square") as! SKSpriteNode

但我得到了:
 Fatal error: unexpectedly found nil while unwrapping an Optional value

所以我尝试了:
 let caseRef = childNode(withName: "Case") as! SKReferenceNode
 let firstSquare = caseRef.childNode(withName: "square") as! SKSpriteNode

但我上了第一个正方形线路:
 Fatal error: unexpectedly found nil while unwrapping an Optional value

如何获取参考场景的子节点?

你在哪里调用这段代码?是从初始化模式(可能你的场景还没有准备好获取它的子节点)还是从didMoveToView方法中调用? - Alessandro Ornano
从我的GameScene.swift中的sceneDidLoad()函数开始。 - cmii
看一下这个答案,让我知道它是否有效。 - Alessandro Ornano
1个回答

10

尝试使用以下代码调用它:

override func sceneDidLoad() {
     if let sprite = self.childNode(withName: "//square") as? SKSpriteNode {
           // do whatever you want with the sprite
     }
     ...
}

可以解释一下在“square”前面的“//”吗?谢谢,它有效了。 - cmii
4
这句话的意思是指搜索应该从根节点开始,在整个节点树中递归地执行。否则,它将从当前位置开始执行递归搜索。详情请参阅:https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/#//apple_ref/doc/uid/TP40013023-CH1-SW74 - Alessandro Ornano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接