如何同步多个 SKSpriteNode 的动画?
How can I synchronize the animation of multiple SKSpriteNodes?
我有几个不同的动画 SKSpriteNodes。新节点在游戏过程中会在不可预测的时间生成,但我希望它们的动画与现有节点同步。
目前,我在 init() 中通过 运行 一个动作从头开始动画:
func init() {
let textures = GlobalVariableTexturesArray
let animation = SKAction.animateWithTextures(...)
let repeat = SKAction.repeatActionForever(animation)
runAction(repeat)
}
我能想到的实现同步的唯一方法是自己计算并计算出 GameScene.update() 期间的当前帧。然后将这个纹理直接应用到我所有的节点上。
只需创建一个父节点,运行 在此节点上执行操作。然后你可以新节点,它们将同步移动:
var parentNode = SKNode()
parentNode.addChild(child1)
parentNode.addChild(child2)
parentNode.runAction(yourAction)
在场景的更新方法中,您需要为每个相关精灵手动设置纹理。
这可能很接近。它假设所有节点都直接位于某种背景层上,并且您的所有节点都符合您定义的子类,该子类实现了一个名为 setNextFrame 的方法:
-(void)update:(CFTimeInterval)currentTime {
[self.bgLayer enumerateChildNodesWithName:@"nodesNameToAnimate" usingBlock:^(SKNode *node, BOOL *stop) {
[(MySubClassedNode*)node setNextFrame:currentTime];
}];
}
我有几个不同的动画 SKSpriteNodes。新节点在游戏过程中会在不可预测的时间生成,但我希望它们的动画与现有节点同步。
目前,我在 init() 中通过 运行 一个动作从头开始动画:
func init() {
let textures = GlobalVariableTexturesArray
let animation = SKAction.animateWithTextures(...)
let repeat = SKAction.repeatActionForever(animation)
runAction(repeat)
}
我能想到的实现同步的唯一方法是自己计算并计算出 GameScene.update() 期间的当前帧。然后将这个纹理直接应用到我所有的节点上。
只需创建一个父节点,运行 在此节点上执行操作。然后你可以新节点,它们将同步移动:
var parentNode = SKNode()
parentNode.addChild(child1)
parentNode.addChild(child2)
parentNode.runAction(yourAction)
在场景的更新方法中,您需要为每个相关精灵手动设置纹理。
这可能很接近。它假设所有节点都直接位于某种背景层上,并且您的所有节点都符合您定义的子类,该子类实现了一个名为 setNextFrame 的方法:
-(void)update:(CFTimeInterval)currentTime {
[self.bgLayer enumerateChildNodesWithName:@"nodesNameToAnimate" usingBlock:^(SKNode *node, BOOL *stop) {
[(MySubClassedNode*)node setNextFrame:currentTime];
}];
}