SpriteKit:克隆节点

SpriteKit: Cloning Nodes

所以我想制作一个代码块,每帧都会 运行 在 sprite 节点内。结果将是我在那里点击并创建一个气泡,然后使用正弦波将其漂浮起来。是否可以将代码写入气泡中?抱歉,如果这看起来含糊不清,我只是不确定该怎么称呼它。我能想到的最接近的事情是克隆,每个克隆 运行 每一帧都是相同的脚本。无论如何,这就是我现在所拥有的。

let bubble = SKSpriteNode(imageNamed:"bubble")    
bubble.position.x = CGFloat(rand())*self.frame.width
bubble.position.y = -20

//Code for bubble to run each frame

self.addChild(bubble)

我认为您正在寻找的是enumerateChildNodesWithName。当它被调用时,它将 运行 它包含在每个节点上的代码,其中包含您输入的名称。

bubble.name = "bubble"

如果您将泡泡命名为"bubble",它的所有子节点也将被命名为"bubble"。

enumerateChildNodesWithName("bubble"){node, stop in
        let bubbleChild:SKSpriteNode = node as! SKSpriteNode

        //Run the code telling them what to do here. You should make it so that
        //it can figure out how to move the node a slight amount based on its position
}

您可以通过将它放在一个由定时器调用的函数中来调用它,并且定时器应该被频繁调用,比如每 0.017 秒(大约每秒 60 次),以便运动是光滑的。例如:

var timer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(0.017), target: self, selector: Selector("moveBubbles:"), userInfo: nil, repeats: true)

然后,创建定时器调用的函数:

func moveBubbles(timer: NSTimer!){
    //enumerateChildNodesWithName here
}

有关 enumerateChildNodesWithName here, and more information on NSTimer here 的更多信息。