Cocos2d iphone 完成对其子对象的所有操作后,删除cclayer

Cocos2d iphone 完成对其子对象的所有操作后,删除cclayer,cocos2d-iphone,Cocos2d Iphone,我有一个CCLayer,它有多个子元素(sprite、ccmenuitemets)。这些孩子有了自己的孩子(大多是CCLabel***或CCMenuItemImages)。所以我想淡出所有的大孩子们和孩子们的层,然后一旦所有的都淡出,我想删除CCLayer 我能够将淡入淡出动作应用于层次结构。但如果我执行[CCLayer removeFromParentWithCleanup:YES],则当仍有一些子项使用淡入淡出操作运行时,它会立即删除 因此,我的问题是,一旦所有gran子对象和子对象都褪色(

我有一个CCLayer,它有多个子元素(sprite、ccmenuitemets)。这些孩子有了自己的孩子(大多是CCLabel***或CCMenuItemImages)。所以我想淡出所有的大孩子们和孩子们的层,然后一旦所有的都淡出,我想删除CCLayer

我能够将淡入淡出动作应用于层次结构。但如果我执行[CCLayer removeFromParentWithCleanup:YES],则当仍有一些子项使用淡入淡出操作运行时,它会立即删除

因此,我的问题是,一旦所有gran子对象和子对象都褪色(不透明度=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。节点有子节点,每个子节点都有自己的子节点。因此,我希望在子节点和gran子节点上完成所有操作后删除节点及其父项层。如何做到这一点?

将顶级容器设置为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

我正在使用COCOS2d 2.1进行IOS淡入层时,使用顺序:淡入,调用块n,在调用块中,您将拥有[self-removeFromParentWithCleanup:YES]。Self就是这一层。我用代码片段编辑了我的问题。在这种情况下,请您提供帮助。传播发生在更新周期中,即根节点的draw调用之前。无论是将上叶计算为下叶,还是将上叶计算为下叶,您都无法看到差异。意外删除了先前的注释。然而我试着用你的方式来回答。但是不透明性并没有传播到CCLayerColor(self)的后代。我做错了什么?有趣的是:CCLayerColor是从CCNode(不是CCNodeRGBA)派生出来的。。。嗯。我通过将所有内容封装到顶级的CCNodeRGBA对象(作为self)中,并拥有自己版本的CCLayerColor来避免这种情况。谢谢。你还是给了我答案的起点。我会更进一步。