Cocos2d 2.0 - 改变CCLayer的规模

时间:2012-06-07 19:37:54

标签: cocos2d-iphone

我有一个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的所有子级更改比例或更改不透明度?

感谢

1 个答案:

答案 0 :(得分:1)

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

示例:

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

现在它正在运作。感谢。