2012-09-13 68 views
4

我正在使用CCSprite與其他一些CCSprite對象添加爲兒童,我使用的其他動畫(縮放和旋轉)效果很好,孩子們也動畫。但是當我使用CCFadeOut時,它只會淡化父母。CCSprite與兒童淡出

我讀過那個淡出不適用於孩子。除了迭代每個孩子並在每個孩子上調用淡出方法之外,還有什麼方法嗎?

+0

是的,因爲'FadeOut'實際上改變了'opacity',所以當這個屬性改變時,效果不會傳播給孩子...... – Mazyod

回答

7

此答案由Gregory Johnson Answer


好過時,我猜你的選擇是(排名從簡單到複雜):

1)剛進入CCSpritecocos2d庫,並破解它。 (< 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
9

隨着cocos2d的版本的。 2.1,CCNodeRGBA具有「CascadeOpacity」BOOL屬性。在父CCSprite上將其設置爲YES以淡出子節點以及父節點。