为场景添加新动作是否会自动删除之前SpriteKit中的动作?

时间:2017-01-23 07:26:56

标签: ios swift sprite-kit skaction

我想知道我是否进行了序列操作,并且当此序列正在运行添加到场景中的新操作时,新操作是否会停止序列?

如果是,如果在swift中添加新动作,我怎么能使它们都工作?

3 个答案:

答案 0 :(得分:3)

如果你试一试,我相信你会自己找到答案。

但无论如何,我为你试过了:

node.run(SKAction.sequence([SKAction.moveBy(x: 100, y: 0, duration: 3), SKAction.moveBy(x: 0, y: 100, duration: 3)]))
node.run(SKAction.rotate(byAngle: CGFloat(M_PI * 2), duration: 6))

我看到的是节点都移动和旋转。因此,您告诉节点运行的每个后续操作都将同时运行。

另一种同时运行操作的方法是使用SKAction.group

答案 1 :(得分:1)

我跟着你的评论,似乎你处于行动重叠的情况。

如果您有一个节点,并且想要启动一个或多个操作,尤其是您的节点参与移动的序列操作,则应确保这些操作已完成。

要做到这一点,例如对自己:

let seq = SKAction.sequence([action1,action2,..])
if self.action(forKey: "moveToRoof") == nil {
   self.run(seq, withKey:"moveToRoof")
}

你也可以这样做:

let group1 = SKAction.group([action1, action2,..])
let group2 = SKAction.group([action1, action2,..])
let addNewNode = SKAction.run{
    self.addChild(node)
}
let seq = SKAction.sequence([action1, group1, action2, addNewNode, group2,..])
if self.action(forKey: "moveToGround") == nil {
       self.run(seq, withKey:"moveToGround")
}

在您的情况下,似乎您想要将节点添加到跟随其父级位置的节点。

override func update(_ currentTime: TimeInterval) {
        if let child = myNode1, let parent = child.parent  { // if exist follow the parent position
            child.position = parent.position
        }
}

答案 2 :(得分:1)

如果两个操作共享同一个键,则新操作唯一会干扰任何正在运行的操作。如果您没有分配密钥,那么每次添加操作时,它都会添加到操作池中并同时运行。