动画后cocos2d autoremove精灵

时间:2010-11-13 20:08:16

标签: iphone objective-c c cocos2d-iphone

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

2 个答案:

答案 0 :(得分:8)

您可以使用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];

并在清理功能中:

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

你可以在这两个动作之间添加另一个动作以及你的破坏粒子动作,而不是在结束函数中调用它。

答案 1 :(得分:3)

方便的方法是使用自定义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]];