Cocos2d:纯色矩形雪碧?

时间:2010-07-27 00:33:28

标签: cocos2d-iphone

我一定错过了什么!

我想创建一个实心矩形CCSprite,背景颜色初始化为特定的RGB值。我查看过所有文档但找不到任何内容。

有没有办法将CCSprite的背景初始化为特定颜色? 我不想为每种颜色都包含纯色PNG。

帮助!

5 个答案:

答案 0 :(得分:21)

用代码做吧!如果你不想弄乱图像文件,这是你的方法:

- (CCSprite*)blankSpriteWithSize:(CGSize)size
{
    CCSprite *sprite = [CCSprite node];
    GLubyte *buffer = malloc(sizeof(GLubyte)*4);
    for (int i=0;i<4;i++) {buffer[i]=255;}
    CCTexture2D *tex = [[CCTexture2D alloc] initWithData:buffer pixelFormat:kCCTexture2DPixelFormat_RGB5A1 pixelsWide:1 pixelsHigh:1 contentSize:size];
    [sprite setTexture:tex];
    [sprite setTextureRect:CGRectMake(0, 0, size.width, size.height)];
    free(buffer);
    return sprite;
}

然后您可以根据需要设置颜色,大小和不透明度。 ;)

答案 1 :(得分:9)

CCSprite的{​​{1}}属性类型为color

ccColor3B

来源:CCSprite参考。

您可以使用- (ccColor3B) color [read, assign] RGB colors: conforms to CCRGBAProtocol protocol Definition at line 145 of file CCSprite.h. 轻松构建ccColor3B结构:

ccc3()

参考:ccColor3B参考。

答案 2 :(得分:5)

我在cocos2d cookbook找到了答案。以下代码源自该书的第1章,可免费预览。

-(CCSprite *) rectangleSpriteWithSize:(CGSize)cgsize color:(ccColor3B) c
{
    CCSprite *sg = [CCSprite spriteWithFile:@"blank.png"];  
    [sg setTextureRect:CGRectMake( 0, 0, cgsize.width, cgsize.height)];
    sg.color = c;   
    return sg;  
}

是的,这仍然需要外部图像文件。但是使用这个1x1 tiny&#39; blank.png&#39;,您可以生成任意大小和颜色的纯色矩形精灵。

答案 3 :(得分:3)

我从未让CCSprite像那样工作。我只是使用CCLayerColor。

CCLayerColor* layercolorHalftransparentred = [CCLayerColor layerWithColor:ccc4(255, 0, 0, 128)];

答案 4 :(得分:0)

对于任何绊倒这个问题的人(像我一样);来自Matjan的代码似乎不再适用于cocos 2d 3.x.请参阅下文,了解适用于我的更改版本:

+ (CCSprite*)blankSpriteWithSize:(CGSize)size
{
    GLubyte *buffer = malloc(sizeof(GLubyte)*4);
    for (int i=0;i<4;i++) {buffer[i]=255;}
    CCTexture *tex = [[CCTexture alloc] initWithData:buffer pixelFormat:CCTexturePixelFormat_RGBA8888 pixelsWide:1 pixelsHigh:1 contentSizeInPixels:size contentScale:1];
    CCSprite *sprite = [CCSprite spriteWithTexture:tex rect:CGRectMake(0,0,size.width,size.height)];
    free(buffer);
    return sprite;
}