0

我有一个有子 CCSprite 的 CCLayer 类(是的,它必须是 CCLayer,而不是 CCSprite)。我需要更改该图层的不透明度和比例,换句话说,我必须更改该图层所有子项的不透明度和比例。

我今天了解到我可以扩展 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;
}

处理尺度,使用相同的思路,但也看到消息multiple methods named 'scale' found

在简历中:如何扩展 CCLayer 类以使 CCLayer 的所有子级更改比例或更改不透明度?

谢谢

4

1 回答 1

1

我发现了问题。我必须将类转换为 CClayer 对象才能读取或设置不透明度......

例子:

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

现在它正在工作。谢谢。

于 2012-06-07T19:51:52.233 回答