0

子 CCSprite を持つ CCLayer クラスがあります (はい、CCSprite ではなく 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 のすべての子のスケールまたは不透明度を変更するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

問題を発見しました。不透明度を読み取ったり設定したりするには、クラスを CClayer オブジェクトにキャストする必要がありました...

例:

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

今、それは働いています。ありがとう。

于 2012-06-07T19:51:52.233 に答える