Stop SKAction that RepeatsForever - Sprite Kit

Я хочу запустить две анимации на моем spriteNode в зависимости от его вращения. Если значение отрицательное, запускает одну из анимаций, если положительное - запускает другую. И мне удалось это (вроде), но у меня проблема. Если Animation1 работает, а zRotation меняется на положительное, они оба работают, потому что они повторяются бесконечно. Итак, я сделал это:

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"];

а затем, когда я хочу, чтобы это прекратилось:

    [self removeActionForKey:@"animation1"];

но он продолжает выполнять действие, тогда как я могу остановить действие? Спасибо!


person iSLB    schedule 26.02.2014    source источник
comment
Измените [self removeActionForKey: @ animation1]; to [спрайт removeActionForKey: @ animation1]; Вам нужно будет поддерживать глобальную переменную, которая указывает на спрайт.   -  person ZeMoon    schedule 26.02.2014
comment
@akashg Вы также можете назвать спрайт, а затем получить его по имени из сцены или узла, который его содержит.   -  person Jason Coco    schedule 26.02.2014
comment
Да, Джейсон прав. Так будет легче поддерживать.   -  person ZeMoon    schedule 26.02.2014
comment
Большое спасибо!! Теперь работает !! Спасибо.   -  person iSLB    schedule 26.02.2014
comment
@akashg, вы должны ввести это как ответ, даже если это простой однострочный текст. Тогда iSLB сможет принять это и, возможно, упростит поиск решения аналогичной проблемы.   -  person Jason Coco    schedule 26.02.2014


Ответы (1)


Предполагается, что метод вызывается на узле, на котором выполняется SKAction.

Изменять

[self removeActionForKey:@"animation1"]; 

to

[sprite removeActionForKey:@"animation1"]; 
person ZeMoon    schedule 26.02.2014
comment
Еще один вопрос, до этого у меня был [спрайт RunAction: Completion ^ {}, теперь у меня есть [спрайт RunAction: withKey:] Как я могу объединить эти два? Выполнить действие с завершением и с ключом, возможно ли это? Спасибо! - person iSLB; 26.02.2014
comment
Сделайте SKAction последовательностью действий, которые вы хотите, вместе с [SKAction runBlock: ^ {}], а затем передайте это действие, используя [спрайт RunAction: withKey:] - person ZeMoon; 26.02.2014
comment
К сожалению, я забыл, что вы используете repeatActionForever :. Это будет немного сложно. - person ZeMoon; 26.02.2014
comment
ZeMoon, можно ли так сделать? Так что сделайте действие и дополнительный блок действия кода, упорядочите их вместе, а затем выполните withKey с помощью repeatActionForever? - person Vladimir Despotovic; 05.08.2016