CCSprite Fadeout с детьми
Я использую CCSprite
с несколькими другими CCSprite
объекты, добавленные как дети, другие анимации, которые я использую (масштабирование и вращение), работают отлично, и дети тоже анимированы. Но когда я использую CCFadeOut
, это только исчезает родитель.
Я читал, что исчезновение не относится к детям. Есть ли способ, кроме как перебирать каждого ребенка и вызывать постепенное исчезновение для каждого из них?
2 ответа
Gregory Johnson Ответ устарел
Ну, я думаю, что ваш выбор (от простого к сложному):
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
у классов есть это. Итак, убедитесь, что вы имейте это в виду.
Рекомендации:
По состоянию на Cocos2d вер. 2.1, CCNodeRGBA имеет свойство BOOL "CascadeOpacity". Установите значение YES на родительском CCSprite, чтобы исчезнуть как дочерние узлы, так и родительский.