我使用CCSprite
和其他几个CCSprite
对象作为孩子添加,我使用的其他动画(缩放和旋转)效果很好,孩子们动画太。但是,当我使用CCFadeOut
时,它只会淡化父级。
我已经读过,淡出并不适用于孩子们。除了迭代每个孩子并在每个孩子上调用淡出之外,还有什么方法吗?
答案 0 :(得分:9)
自Cocos2d ver。 2.1,CCNodeRGBA具有“CascadeOpacity”BOOL属性。在父CCSprite上将其设置为YES以淡出子节点以及父节点。
答案 1 :(得分: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];
}
}
2)与上面的解决方案相同,除了CCSprite
到MyCCSprite
的子类,并且从它继承而不是CCSprite
。最后,在新类中覆盖setOpacity:
:
- (void) setOpacity:(GLubyte)opacity
{
[super setOpacity:opacity];
for(id<CCRGBAProtocol> child in children) {
[child setOpacity:opacity];
}
}
3)通过迭代对父级和运行CCFade
操作。 (傻,如果你问我的话)。
重要提示:请随便请注意,opacity
是CCRGBAProtocol
的属性。并非所有CCNode
类都有它。因此,请务必牢记这一点。
<强>参考文献:强>