Christian
Christian

Reputation: 22353

Run SKActions sequence with different nodes

I know that I can create an SKAction.sequence which will run the actions of one node one by one. But how can I do that if I want to do a sequence with different nodes. I'd like to do something like that:

  1. Run action from node A
  2. wait 2 seconds
  3. Run action from node B.

Upvotes: 5

Views: 1536

Answers (1)

godel9
godel9

Reputation: 7400

If both nodes are uniquely named and are children of the same node, you can use runAction:onChildWithName:, as follows:

SKAction *action = [SKAction sequence:
    @[[SKAction runAction:[SKAction moveTo:CGPointMake(200.0f, 200.0f) duration:1.0f]
          onChildWithName:@"NODEA"],
      [SKAction waitForDuration:2.0f],
      [SKAction runAction:[SKAction moveTo:CGPointMake(200.0f, 200.0f) duration:1.0f]
          onChildWithName:@"NODEB"]]];

[parent runAction:action];

More generally, you can use runBlock: to do pretty much anything as a step in an SKAction sequence:

SKAction *action = [SKAction sequence:
    @[[SKAction runBlock:^{
          [nodeA runAction:[SKAction moveTo:CGPointMake(200.0f, 200.0f) duration:1.0f]];
      }],
      [SKAction waitForDuration:2.0f],
      [SKAction runBlock:^{
          [nodeB runAction:[SKAction moveTo:CGPointMake(200.0f, 200.0f) duration:1.0f]];
      }]]];

[parent runAction:action];

Upvotes: 8

Related Questions