完成对其子项的所有操作后,删除cclayer

时间:2014-04-22 19:07:43

标签: cocos2d-iphone

我有一个有多个孩子的CCLayer(Sprites,CCMenuItemImages ets)。这些孩子正在生孩子(主要是CCLabel ***或CCMenuItemImages)。所以我想淡出图层中所有的孙子和孩子,然后一旦褪色,我想删除CCLayer。

我可以将渐变动作应用于层次结构。但是如果我这样做[CCLayer removeFromParentWithCleanup:YES],那么它会立即删除,同时仍有一些孩子正在使用淡入淡出动作。

所以我的问题是,一旦所有格兰儿童和儿童都褪色(不透明度= 0),我该如何删除父图层。

编辑:这是一段代码

for(CCNode *node in itemLayer.children)
{
    for(CCSprite *sprite in parentLayer.children)
    {
        for(id item in sprite.children)
            [item runAction:[CCFadeTo actionWithDuration:2.5f opacity:0]];
        [sprite runAction:[CCFadeTo actionWithDuration:2.5f opacity:0]];
    }
}

itemLayer是具有CCNode *节点的父CCLayer。节点有孩子,每个孩子都有自己的孩子。所以我想在子项和子项上完成所有操作后删除节点及其父项itemLayer。怎么做?

1 个答案:

答案 0 :(得分:1)

使您的顶级容器成为CCNodeRGBA并在init中设置:

self.cascadeColorEnabled=YES;
self.cascadeOpacityEnabled=YES;
self.opacity=255;

当您对此运行CCFadeAction时,该节点将执行级联到子项和子项的所有拆分。在淡入淡出动作结束时,

id fade = [CCFadeTo actionWithDuration:2.5 opacity:0];
id done = [CCCallBlock actionWithBlock:^{
    [self removeFromParentAndCleanup:YES];
    // plus whatever else you see fit
}];
id seq  = [CCSequence actions:fade, done, nil];
[self runAction:seq];

ob cit:来自记忆,未编译或测试,YMMV