使用相同名称更新多个Spritekit节点

时间:2017-04-21 02:35:34

标签: ios swift3 sprite-kit

我目前正在使用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")与我的节点,以便它将识别所有这些并移动它们。现在这些碎片仍然保持不变。我从另一个人的帖子中发现了这个功能 - 他/她试图产生"敌人"在他/她的游戏中。提前谢谢!

1 个答案:

答案 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)等等。

在您的代码中,您对枚举返回的节点没有任何作用。