动画后cocos2d autoremove精灵

我是cocos2d和iphone开发的新手。 我想创建一些动画,当一些带有它的精灵的物理对象被破坏时(例如显示一个闪光)。 我想做一些我会说的对象:运行动画并在完成后摧毁自己。 然后我想忘记这个对象 – 它应该在动画结束时自动销毁。 最好的方法是什么?

您可以使用CCSequence创建操作列表。 您要做的第一个动作应该是您的常规动作(或序列)。 第二个动作应该是CCCallFuncND动作,你可以调用一个清理函数并传递给定的精灵。

在我的头顶我会做这样的事情:

CCSprite* mySpriteToCleanup = [CCSprite spriteWithFile:@"mySprite.png"]; [self addChild:mySpriteToCleanup]; // ... do stuff // start the destroy process id action1 = [CCIntervalAction actionWithDuration:0]; // the action it sounds like you have written above. id cleanupAction = [CCCallFuncND actionWithTarget:self selector:@selector(cleanupSprite:) data:mySpriteToCleanup]; id seq = [CCSequence actions:action1, cleanupAction, nil]; [mySpriteToCleanup runAction:seq]; 

并在清理function:

 - (void) cleanupSprite:(CCSprite*)inSprite { // call your destroy particles here // remove the sprite [self removeChild:inSprite cleanup:YES]; } 

您可以在这两个操作之间添加另一个操作以及您的destroy粒子操作,而不是在end函数中调用它。

方便的方法是使用自定义RemoveNode操作,删除正在运行的CCNode对象( CCSprite也是CCNode )。

 //Remove the node from parent and cleanup @interface RemoveNode : CCActionInstant {} @end @implementation RemoveNode -(void) startWithTarget:(id)aTarget { [super startWithTarget:aTarget]; [((CCNode *)target_) removeFromParentAndCleanup:YES]; } @end 

将它放在CCSequence最后一个参数中。 例如,淡出后将删除精灵:

 [mySprite runAction:[CCSequence actions: [CCFadeOut actionWithDuration:0.5], [RemoveNode action], nil]];