问题
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:
- Run action from node A
- wait 2 seconds
- Run action from node B.
回答1:
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];
来源:https://stackoverflow.com/questions/25823428/run-skactions-sequence-with-different-nodes