私が使用しCCSprite
ている他のいくつかのCCSprite
オブジェクトを子として追加して使用しています。使用している他のアニメーション (スケーリングと回転) はうまく機能し、子もアニメーション化されています。しかし、私が使用しているときはCCFadeOut
、親だけがフェードします。
フェードアウトは子供には適用されないことを読みました。すべての子を繰り返し処理し、それぞれのフェードアウトを呼び出す以外に方法はありますか?
私が使用しCCSprite
ている他のいくつかのCCSprite
オブジェクトを子として追加して使用しています。使用している他のアニメーション (スケーリングと回転) はうまく機能し、子もアニメーション化されています。しかし、私が使用しているときはCCFadeOut
、親だけがフェードします。
フェードアウトは子供には適用されないことを読みました。すべての子を繰り返し処理し、それぞれのフェードアウトを呼び出す以外に方法はありますか?
Cocos2d ver. 2.1 では、CCNodeRGBA に「CascadeOpacity」BOOL プロパティがあります。親 CCSprite で YES に設定すると、子ノードと親ノードがフェードアウトします。
この回答は、グレゴリー・ジョンソンの回答によって廃止されました
さて、あなたの選択は次のとおりだと思います(最も単純なものから複雑なものまでランク付けされています):
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];
}
}
CCSprite
2) にサブクラス化しMyCCSprite
、 の代わりにそれを継承することを除いて、上記のソリューションと同じですCCSprite
。setOpacity:
最後に、新しいクラスでオーバーライドします。
- (void) setOpacity:(GLubyte)opacity
{
[super setOpacity:opacity];
for(id<CCRGBAProtocol> child in children) {
[child setOpacity:opacity];
}
}
3)CCFade
親と子に対してアクションを繰り返し実行します。(あなたが私に尋ねるなら、ばかげている)。
重要:opacity
の所有物であることを覚えておいてくださいCCRGBAProtocol
。すべてのCCNode
クラスがそれを持っているわけではありません。ですから、そのことを心に留めておいてください。
参考文献: