2011-01-13 87 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]; 

所以经过动画完成的targetObject的mySelector方法将被调用。 如果您想通过回调和/或发件人传递某些数据,请使用CCCallFuncN或CCCallFuncND操作

+0

restoreOriginalFrame已弃用。现在,你会这样做:ani.restoreOriginalFrame = YES;在运行之前。 – Jason 2013-04-30 01:43:58