Как остановить анимацию через некоторое время в cocos2d-iphone?

Код ::

if (CGRectIntersectsRect(food.sprite.boundingBox, playerRect)) {
    [food.sprite stopAllActions]; 

    [walkAnimFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:

    [NSString stringWithFormat:@"newpackman2.png", 0]]];

    [walkAnimFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:

    [NSString stringWithFormat:@"newpackman3.png", 1]]];

    walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.2f];

    self.walkAction = [CCRepeatForever actionWithAction: [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]];

    self.walkAction.tag = 1;
    [chef runAction:_walkAction];
}

Он отлично работает, он запускает анимацию, когда объект сталкивается с шеф-поваром, но работает непрерывно.
Я хочу остановить анимацию через 3-4 секунды.
Я использовал [sprite stopActionByTag:1], но у меня это не работает, после запуска она не останавливается.


person V.D    schedule 19.03.2013    source источник


Ответы (2)


Например, вы можете создать блок действий, который останавливает все анимации, и вызывать там метод stopAllActions.

CCSprite *sprite = ...;

CCCallBlock *block = [CCCallBlock actionWithBlock:^{
            [sprite stopAllActions];
        }];

и используйте CCDelayTime для некоторой задержки

CCDelayTime *time = [CCDelayTime actionWithDuration:4];


[sprite runAction:[CCSequence actions:time, block, nil]];
person B.S.    schedule 19.03.2013
comment
Вау, это работает как шарм, но останавливает другие мои действия, такие как [chef runAction: [CCRepeatForever actionWithAction: [CCSequence action: [CCMoveBy actionWithDuration: 1.0 position: ccp (0,240)], [CCMoveBy actionWithDuration: 1.0 position: ccp (0) ,-240)], ноль]]]; я хочу продолжить это действие после того, как моя анимация остановится. - person V.D; 19.03.2013
comment
Помню, у меня были проблемы с остановкой. Тогда вам не нужно прекращать все действия. Попробуйте установить теги для всех ваших анимаций CCMoveBy, CCMoveBy, CCSequence, CCRepeatForever. И в этом блоке их остановить с помощью тега. - person B.S.; 19.03.2013
comment
Аааа, работает отлично... Спасибо!! Я хочу проголосовать, но у меня недостаточно репутации.. - person V.D; 19.03.2013

В Cocos2d stopAllActions останавливает все действия, добавленные к тому же узлу. Если не останавливается, это означает, что вы ссылаетесь на неправильный узел. Убедитесь, что вы вызвали команду stopAllActions для правильного спрайта.

person Guru    schedule 19.03.2013