0

我有一些带有动作的节点,如下所示:

SKSpriteNode *randomSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
SKAction *action = [SKAction moveToY:0 duration:3.5];
[randomSprite runAction:[SKAction repeatAction:action count:1]];

在代码的某个地方(不是在我首先创建的地方)我用另一个动作创建新节点

SKSpriteNode *anotherSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
SKAction *action = [SKAction moveToY:0 duration:0.5];
[anotherSprite runAction:[SKAction repeatAction:action count:1]];

但是只有当第一个节点完成他的动作时我才需要开始第二个节点的动作我怎么能做到?

4

2 回答 2

1

你可以在一个单独的方法中拥有第二个精灵,比如说

-(void)secondSpriteAction:(SKSpriteNode*)secondSprite{
  SKAction *action = [SKAction moveToY:0 duration:0.5];
  [secondSprite runAction:[SKAction repeatAction:action count:1]];
}

并在第一个精灵的动作中为此方法制作一个选择器

SKAction *performSelector = [SKAction performSelector:@selector(secondSpriteAction:) onTarget:self];

然后你可以添加

SKAction *sequence = [SKAction sequence:@[action,performSelector]];

而不是重复动作,重复序列

[randomSprite runAction:[SKAction repeatAction:sequence count:1]];

所以是这样的:

SKSpriteNode *randomSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
SKAction *action = [SKAction moveToY:0 duration:3.5];
SKAction *performSelector = [SKAction performSelector:@selector(secondSpriteAction:) onTarget:self];
SKAction *sequence = [SKAction sequence:@[action,performSelector]];
[randomSprite runAction:[SKAction repeatAction:sequence count:1]];
于 2014-06-04T17:34:19.337 回答
1

您可以使用该completionrunAction:

SKSpriteNode *randomSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
SKAction *action = [SKAction moveToY:0 duration:3.5];

[randomSprite runAction:[SKAction repeatAction:action count:1] completion:^{

    SKSpriteNode *anotherSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
    SKAction *action = [SKAction moveToY:0 duration:0.5];
    [anotherSprite runAction:[SKAction repeatAction:action count:1]];

}];

如果您需要在代码中的其他位置初始化 anotherSprite,您可以将它放在另一个方法中,如 Lamikins 建议的,并从完成块中调用该方法。

阅读这里runAction: completion:的方法。

于 2014-06-05T06:26:50.737 回答