【问题标题】:Remove cclayer once all actions finished on its children对子级的所有操作完成后删除 cclayer
【发布时间】:2014-04-23 04:15:22
【问题描述】:

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

我能够对层次结构应用淡入淡出操作。但是如果我这样做 [CCLayer removeFromParentWithCleanup:YES],那么它会立即删除,而仍然有一些孩子正在使用淡入淡出动作运行。

所以我的问题是,一旦所有的子项和子项都褪色(不透明度 = 0),我如何删除父层。

编辑:这是一个代码 sn-p

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。如何做到这一点?

【问题讨论】:

  • 我正在使用 COCOS2d 2.1 for IOS
  • 当淡入层时,使用一个序列:fade, callBlockN,在调用块中你将有 [self removeFromParentWithCleanup:YES]; .自我是层。
  • 我用代码 sn-p 编辑了我的问题。在这种情况下你能帮忙吗?

标签: cocos2d-iphone


【解决方案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

【讨论】:

  • 传播发生在更新周期内,在来自根节点的绘图调用之前。无论您是计算顶叶到底叶还是相反,您都无法看到差异。
  • 不小心删除了之前的评论。但是,我尝试了您的回答方式。但是不透明度不会传播到 CCLayerColor(自身)的孙子。我做错了什么?
  • 有趣:CCLayerColor 源自 CCNode(不是 CCNodeRGBA)...呵呵。我通过将所有内容封装到顶级 CCNodeRGBA 对象(作为自己)中并拥有自己的 CCLayerColor 版本来避免这种情况。
  • 谢谢。你仍然给了我答案的起点。我会更进一步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多