我目前正在使用Spritekit& Swift3第一次;它是一个2D,侧滚动无尽的跑步者。我试图用我的相机移动某些节点,但问题是它们是程序生成的,属于同一个类,所以我需要它们都具有相同的名称。在我进一步讨论之前,这里是相关的代码部分:
(所有变量都已初始化)
//使用相机移动这些节点
private var ChoosePieces: ChoosePiecesClass?;
override func didMove(to view: SKView) {
initializeGame();
}
override func update(_ currentTime: TimeInterval) {
enumerateChildNodes(withName: "ChoosePieces") {
node, stop in
_ = node as! SKSpriteNode
self.ChoosePieces?.moveWithCamera();
}
}
private func initializeGame() {
ChoosePieces = childNode(withName: "ChoosePieces") as? ChoosePiecesClass;
}
我已经测试了moveWithCamera()函数并且效果很好 - 它只是将节点的x值增加10,以与摄像机相同的速度移动,以便节点在屏幕上保持不变位置。
我的问题是我不确定如何使用enumerateChildNodes(withName:" String")与我的节点,以便它将识别所有这些并移动它们。现在这些碎片仍然保持不变。我从另一个人的帖子中发现了这个功能 - 他/她试图产生"敌人"在他/她的游戏中。提前谢谢!
答案 0 :(得分:3)
通常使用enumerateChildNodes
,您可以对返回的节点执行某些操作,例如修改你自己的例子:
override func update(_ currentTime: TimeInterval) {
enumerateChildNodes(withName: "ChoosePieces") {
node, stop in
if let piece = node as? SKSpriteNode { // Cast to Sprite if we can
piece.moveWithCamera()
}
}
}
因此,对于返回的每个node
,我们将其转换为名为' piece的新SKSpriteNode(如果我们可以 - 使用as?
运算符 - 因为enumerateChildNodes
返回SKNodes )'然后在''上拨打moveWithCamera
。节点
(我编写的piece.moveWithCamera()
行 - 您的原始代码似乎是在调用类方法(?)来执行某些操作。您可能需要self.moveWithCamera(piece)
等等。
在您的代码中,您对枚举返回的节点没有任何作用。