Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.
like image 947
Christian Avatar asked Sep 13 '14 12:09

Christian


1 Answers

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];
like image 103
godel9 Avatar answered Oct 23 '22 20:10

godel9