11

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!

iSLB
  • 125
  • 1
  • 1
  • 5
  • 2
    Change [self removeActionForKey:@"animation1"]; to [sprite removeActionForKey:@"animation1"]; You will have to maintain a global variable which points to the sprite. – ZeMoon Feb 26 '14 at 09:37
  • @akashg You could also name the sprite and then later retrieve it by name from the scene or node that contains it. – Jason Coco Feb 26 '14 at 09:38
  • Yes, Jason is right. That will be easier to maintain. – ZeMoon Feb 26 '14 at 09:39
  • @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 Feb 26 '14 at 09:45

1 Answers1

17

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

Change

[self removeActionForKey:@"animation1"]; 

to

[sprite removeActionForKey:@"animation1"]; 
ZeMoon
  • 20,054
  • 5
  • 57
  • 98
  • Just one more question, before this I had [sprite RunAction: Completion^{} , now I have [sprite RunAction: withKey:] How Can I merge this two? Run action with completion and withKey, is that possible? thank you! – iSLB Feb 26 '14 at 10:11
  • Make the SKAction a sequence of the action you want along with a [SKAction runBlock:^{ }] and then pass this action using [sprite RunAction: withKey:] – ZeMoon Feb 26 '14 at 10:19
  • Oops, I forgot u r using repeatActionForever:. This will be a little tricky. – ZeMoon Feb 26 '14 at 10:20
  • ZeMoon, is it possible to do it like that? So make the action and additional block of code action, sequence them together and then do the withKey with repeatActionForever? – Vladimir Despotovic Aug 05 '16 at 20:57