2013-03-19 3 views
0

Код ::Как остановить анимацию после некоторого интервала в 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] но, он не работает для меня, как только он начинается, он не останавливается.

ответ

2

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

CCSprite *sprite = ...; 

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

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

CCDelayTime *time = [CCDelayTime actionWithDuration:4]; 


[sprite runAction:[CCSequence actions:time, block, nil]]; 
+0

Wow ,, это работает как шарм но он останавливает мое другое действие, например [chef runAction: [CCRepeatForever actionWithAction: [Действия CCSequence: [CCMoveBy actionWit hDuration: 1.0 позиция: ccp (0,240)], [CCMoveBy actionWithDuration: 1.0 позиция: ccp (0, -240)], nil]]]; Я хочу продолжить это действие после остановки анимации. –

+0

Помню, у меня были проблемы с остановкой. Чем вам не нужно останавливать все действия. Попробуйте установить теги для всех ваших анимаций CCMoveBy, CCMoveBy, CCSequence, CCRepeatForever. И в этом блоке остановить их с помощью тега. –

+0

Ahhh, он отлично работает ... Спасибо! Я хочу проголосовать, но не имеет достаточной репутации. –

0

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

0
CCDelayTime *time = [CCDelayTime actionWithDuration:10];// After 10 mile seconds 

[sprite runAction:[CCSequence actions:time, block, nil]];