我有一个CCLayer类(是的,它必须是CCLayer,而不是CCSprite),它有子CCSprites。我需要更改该层的不透明度和比例,换句话说,我必须更改该层的所有子项的不透明度和比例。
我今天了解到,我可以扩展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的不透明度时仍然看到此错误:找到名为'opacity'的多个方法
我也超越了这个并将其添加到类扩展中:
-(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;
}
要处理比例,使用相同的想法,还要看到消息找到名为'scale'的多个方法
简历中:如何扩展CCLayer类以使CCLayer的所有子级更改比例或更改不透明度?
感谢
答案 0 :(得分:1)
我发现了这个问题。我必须将类强制转换为CClayer对象才能读取或设置不透明度......
示例:
[(CCLayer*)obj setScale:0.5f];
现在它正在运作。感谢。