2011-01-13 3 views
0

я играю анимации, как это:анимация заканчивается на первом кадре

- (CCSprite *)explodeWithBatchNode:(CCSpriteBatchNode *)batchNode andAnimation:(CCAnimation *)ani 
{  
    CCSprite *explosionSprite = [CCSprite spriteWithTexture:batchNode.texture rect :CGRectMake(0, 0, 154,119)]; 

    CCAction *goldenExplosionAction = [CCAnimate actionWithAnimation:ani]; 
    [explosionSprite runAction:goldenExplosionAction]; 

    return explosionSprite;  
} 

Все работает отлично, единственная проблема заключается в том, что анимация останавливается на первом кадре вместо последнего. Как я могу его закончить на последнем ?, также, как я могу узнать, что анимация закончилась?

ответ

3

+ (id) actionWithAnimation:CCAnimation *) a restoreOriginalFrame:(BOOL) b

это метод в действии CCAnimate. Просто поместите второй аргумент NO

В вашем случае CCAction *goldenExplosionAction = [CCAnimate actionWithAnimation:ani restoreOriginalFrame:NO];

Чтобы понять анимация была закончена создать функцию обратного вызова, которая будет вызвана после анимации, как это:

id animation = [CCAnimate actionWithAnimation: someAnimation]; 
id callback = [CCCallfunc actionWithTarget: targetObject selector: @selector(mySelector)]; 
id sequence = [CCSequence actions: animation, callback, nil]; 
[mySprite runAction: sequence]; 

Так после того, как анимация будет вызван метод mySelector объекта targetObject. Если вы хотите передать некоторые данные через обратный вызов и/или отправитель, используйте действия CCCallFuncN или CCCallFuncND

+0

restoreOriginalFrame устарел. Теперь вы бы сделали: ani.restoreOriginalFrame = YES; перед запуском. – Jason

Смежные вопросы