动画后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]];