4

私が使用しCCSpriteている他のいくつかのCCSpriteオブジェクトを子として追加して使用しています。使用している他のアニメーション (スケーリングと回転) はうまく機能し、子もアニメーション化されています。しかし、私が使用しているときはCCFadeOut、親だけがフェードします。

フェードアウトは子供には適用されないことを読みました。すべての子を繰り返し処理し、それぞれのフェードアウトを呼び出す以外に方法はありますか?

4

2 に答える 2

9

Cocos2d ver. 2.1 では、CCNodeRGBA に「CascadeOpacity」BOOL プロパティがあります。親 CCSprite で YES に設定すると、子ノードと親ノードがフェードアウトします。

于 2014-05-19T12:13:35.190 に答える
7

この回答は、グレゴリー・ジョンソンの回答によって廃止されました


さて、あなたの選択は次のとおりだと思います(最も単純なものから複雑なものまでランク付けされています):

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];
    }
}

CCSprite2) にサブクラス化しMyCCSprite、 の代わりにそれを継承することを除いて、上記のソリューションと同じですCCSpritesetOpacity:最後に、新しいクラスでオーバーライドします。

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

3)CCFade子に対してアクションを繰り返し実行します。(あなたが私に尋ねるなら、ばかげている)。

重要:opacityの所有物であることを覚えておいてくださいCCRGBAProtocol。すべてのCCNodeクラスがそれを持っているわけではありません。ですから、そのことを心に留めておいてください。

参考文献:

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