【问题标题】:How can I synchronize the animation of multiple SKSpriteNodes?如何同步多个 SKSpriteNode 的动画?
【发布时间】:2015-02-02 17:33:30
【问题描述】:

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

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

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

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

【问题讨论】:

  • 确实,您必须手动为纹理更改设置动画,而不是使用动作

标签: ios animation swift sprite-kit


【解决方案1】:

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

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

-(void)update:(CFTimeInterval)currentTime {

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

【讨论】:

  • 这大概就是我最终做的事情。
【解决方案2】:

只需创建一个父节点并在此节点上运行操作。然后你可以新建节点,它们会同步移动:

var parentNode = SKNode()

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

parentNode.runAction(yourAction)

【讨论】:

  • 一起移动,是的,但问题是关于帧/纹理动画
猜你喜欢
  • 1970-01-01
  • 2021-04-06
  • 2011-09-24
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多