11
votes

I want to run two animations on my spriteNode depending on its rotation. If the value is negative run one of the animations, if it's positive run the other. And I managed to do that (kind of) but I have a problem. If Animation1 is running, and zRotation changes to positive, they both run because they are repeating forever. So I did this :

NSMutableArray *walkingTextures = [NSMutableArray arrayWithCapacity:14];


for (int i = 1; i < 15; i++) {
    NSString *textureName =
    [NSString stringWithFormat:@"character%d", i];
    SKTexture *texture =
    [SKTexture textureWithImageNamed:textureName];
    [walkingTextures addObject:texture];
}

SKAction *spriteAnimation = [SKAction animateWithTextures:Textures timePerFrame:0.04];
    repeatWalkAnimation = [SKAction repeatActionForever:spriteAnimation];
    [sprite runAction:repeatWalkAnimation withKey:@"animation1"];

and then when I want it to stop :

    [self removeActionForKey:@"animation1"];

but it keeps running the action, how can I stop the action, then? Thank you!

1
Change [self removeActionForKey:@"animation1"]; to [sprite removeActionForKey:@"animation1"]; You will have to maintain a global variable which points to the sprite.ZeMoon
@akashg You could also name the sprite and then later retrieve it by name from the scene or node that contains it.Jason Coco
Yes, Jason is right. That will be easier to maintain.ZeMoon
Thank's a lot!! It works now!! Thank you.iSLB
@akashg you should type up this as an answer, even tho it's a simple one-liner. Then iSLB can accept it and possibly make it easier for someone to find the solution to a similar issue.Jason Coco

1 Answers

17
votes

The method is supposed to be called on the node which the SKAction is running on.

Change

[self removeActionForKey:@"animation1"]; 

to

[sprite removeActionForKey:@"animation1"];