如何同步多个SKSpriteNodes的动画?

时间:2015-02-02 17:33:31

标签: ios animation swift sprite-kit

我有几个动画的不同SKSpriteNodes。在游戏过程中,新节点会在不可预测的时间产生,但我希望它们能够与现有节点同步动画。

目前,我通过运行动作从头开始在init()中启动动画:

func init() {
  let textures = GlobalVariableTexturesArray
  let animation = SKAction.animateWithTextures(...)
  let repeat = SKAction.repeatActionForever(animation)
  runAction(repeat)
}

我能想到完成同步的唯一方法是在GameScene.update()期间进行自己的数学计算并找出当前帧。然后直接将此纹理应用于我的所有节点。

2 个答案:

答案 0 :(得分:1)

在场景的更新方法中,您需要为相关的每个精灵手动设置纹理。

这可能很接近。它假设所有节点都直接在某种背景层上,并且所有节点都符合您定义的子类,该子类实现了一个名为setNextFrame的方法:

-(void)update:(CFTimeInterval)currentTime {

    [self.bgLayer enumerateChildNodesWithName:@"nodesNameToAnimate" usingBlock:^(SKNode *node, BOOL *stop) {
        [(MySubClassedNode*)node setNextFrame:currentTime];
    }];
}

答案 1 :(得分:-1)

只需创建父节点并在此节点上运行操作即可。然后你可以新的节点,他们将移动同步:

var parentNode = SKNode()

parentNode.addChild(child1)
parentNode.addChild(child2)

parentNode.runAction(yourAction)