2012-06-07 3 views
0

У меня есть класс CCLayer (да, это должен быть CCLayer, а не CCSprite), у которого есть дочерние CCSprites. Мне нужно изменить непрозрачность и масштаб этого слоя, что, другими словами, мне нужно изменить непрозрачность и масштаб всех детей этого слоя.Cocos2d 2.0 - изменение масштаба CCLayer

Я узнал сегодня, что я могу расширить класс CClayer, используя это, чтобы иметь дело с непрозрачностью детей ...

#import "CCLayer+Opaque.h" 

@implementation CCLayer (CCLayer_Opaque) 
// Set the opacity of all of our children that support it 
-(void) setOpacity: (GLubyte) opacity 
{ 
    for(CCNode *node in [self children]) 
    { 
     if([node conformsToProtocol:@protocol(CCRGBAProtocol)]) 
     { 
      [(id<CCRGBAProtocol>) node setOpacity: opacity]; 
     } 
    } 
} 
- (GLubyte)opacity { 
    for (CCNode *node in [self children]) { 
     if ([node conformsToProtocol:@protocol(CCRGBAProtocol)]) { 
      return [(id<CCRGBAProtocol>)node opacity]; 
     } 
    } 
    return 255; 
} 
@end 

Я сделал это и импортировать файл в моем главном классе, но я до сих пор эта ошибка возникает при попытке установить непрозрачность этого CCLayer: несколько методов с именем «непрозрачности» найдено

Я также пошел дальше и добавил это расширение класса:

-(void) setScale: (CGFloat) scale 
{ 
    for(CCNode *node in [self children]) 
    { 
      [node setScale: scale]; 
    } 
} 


-(CGFloat) scale 
{ 
    for(CCNode *node in [self children]) 
    { 
      return [node scale]; 
    } 
    return 1.0f; 
} 

Чтобы справиться с масштабом, используя ту же самую идею, но и увидеть сообщение несколько методов с именем «шкало» найдены

В резюме: как я расширить класс CCLayer, чтобы сделать все ребенок изменения CCLayer масштаб или изменение непрозрачности?

спасибо

+0

Являются ли ваши реализации шкалы непрозрачности просто возвращением прозрачности/масштаба первого ребенка? Это намеренно? – jonmorgan

+0

Да, потому что, поскольку я изменяю все непрозрачности всех детей на одно и то же значение, мне просто нужно вернуть его, чтобы узнать, насколько непрозрачность. – SpaceDog

ответ

1

Я обнаружил проблему. Я должен был бросить класс объекта CClayer, чтобы прочитать или установить непрозрачность ...

Пример:

[(CCLayer*)obj setScale:0.5f]; 

Сейчас она работает. Благодарю.

Смежные вопросы