4

我正在使用 aCCSprite和其他一些CCSprite添加为子对象的对象,我正在使用的其他动画(缩放和旋转)效果很好,并且子对象也是动画的。但是当我使用时CCFadeOut,它只会淡化父级。

我读过淡出不适用于孩子。除了遍历每个孩子并在每个孩子上调用淡出之外,还有其他方法吗?

4

2 回答 2

9

从 Cocos2d 版本开始。2.1,CCNodeRGBA 有一个“CascadeOpacity”BOOL 属性。在父 CCSprite 上将其设置为 YES 以淡出子节点以及父节点。

于 2014-05-19T12:13:35.190 回答
7

此答案已被Gregory Johnson Answer废弃


好吧,我猜你的选择是(从最简单到复杂排列):

1)只需进入图书馆的CCSprite课程,然后破解它。cocos2d(<3 个开源)。(不推荐)。

-(void) setOpacity:(GLubyte) anOpacity
{
opacity_ = anOpacity;

// special opacity for premultiplied textures
if( opacityModifyRGB_ )
    [self setColor: colorUnmodified_];

    [self updateColor];

    for (id<CCRGBAProtocol> child in children ) {
        // You should check if child responds to selector or conforms to CCRGBAProtocol.
        [child setOpacity:opacity];
    }
}

2)与上面的解决方案相同,除了子类CCSpriteMyCCSprite,并从它继承而不是CCSprite。最后,setOpacity:在新类中覆盖:

- (void) setOpacity:(GLubyte)opacity
{
    [super setOpacity:opacity];
    for(id<CCRGBAProtocol> child in children) {
        [child setOpacity:opacity];
    }
}

3)通过迭代CCFade对父项和子项运行操作。(傻,如果你问我)。

重要提示:请,请,请记住,这opacityCCRGBAProtocol. 不是所有CCNode的班级都有。所以,请务必记住这一点。

参考:

  1. http://www.cocos2d-iphone.org/forum/topic/1252
于 2012-09-13T17:55:16.943 回答