我想知道我是否进行了序列操作,并且当此序列正在运行添加到场景中的新操作时,新操作是否会停止序列?
如果是,如果在swift中添加新动作,我怎么能使它们都工作?
答案 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)
如果两个操作共享同一个键,则新操作唯一会干扰任何正在运行的操作。如果您没有分配密钥,那么每次添加操作时,它都会添加到操作池中并同时运行。