2012-09-13 1 views
4

다른 CCSprite 오브젝트를 어린이로 추가 한 CCSprite 오브젝트를 사용하고 있으며, 다른 애니메이션 (스케일 및 회전)이 훌륭하게 작동하고 아이들도 움직입니다. 하지만 CCFadeOut을 사용하고있을 때는 부모 만 사라집니다.CCSprite 아이들과 함께 페이드 아웃

나는 아이들에게 페이드 아웃이 적용되지 않는다고 읽었습니다. 모든 어린이를 반복하고 각각의 페이드 아웃을 호출하는 것 이외의 다른 방법이 있습니까?

+0

예, 'FadeOut'이 실제로'불투명도 '를 변경하므로이 속성을 변경하면 효과가 하위에 전파되지 않습니다. – Mazyod

답변

7

은이 답변이 Gregory Johnson Answer


자에 의해 사용되지 않는 렌더링, 당신의 선택은 (간단한에서 복잡한 위)하는 것 같아요 :

1) 그냥 cocos2d 라이브러리에 CCSprite 클래스로 이동하고, 해킹 해. (< 3 오픈 소스). (권장하지 않음). MyCCSprite에 서브 CCSprite 제외한 상기 용액 동일

-(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 상속. 마지막으로, 새 클래스에 setOpacity:를 오버라이드 (override) :

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

3)을 반복하여 부모에 아이들을 CCFade 조치를 실행합니다. (바보, 내게 묻는다면).

중요 : 그냥, opacityCCRGBAProtocol의 한 속성입니다 것을 명심하시기 바랍니다 제발, 제발. 모든 CCNode 클래스에있는 것은 아닙니다. 그러니 그걸 명심하십시오.

참고 : 버전적인 Cocos2D의로

  1. http://www.cocos2d-iphone.org/forum/topic/1252
9

. 2.1에서 CCNodeRGBA에는 "CascadeOpacity"BOOL 속성이 있습니다. 상위 CCSprite에서 YES로 설정하여 하위 노드와 상위 노드를 페이드 아웃하십시오.