Cocos2d:如何创建一个纯色矩形精灵?

9

我一定是漏掉了什么!

我想创建一个实心的矩形CCSprite,其背景颜色初始化为特定的RGB值。我已经在文档中寻找了很久,但没有找到任何信息。

是否有办法将CCSprite的背景初始化为特定颜色?我不想为每种需要的颜色都包含一个实心颜色的PNG文件。

救命啊!

5个回答

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
对于那些使用突变版本(即cocos2d-x)的人:https://gist.github.com/Mazyod/208e5fb2d7a56290a261 - Mazyod

9

CCSprite有一个类型为ccColor3Bcolor属性:

- (ccColor3B) color [read, assign]
RGB colors: conforms to CCRGBAProtocol protocol    

Definition at line 145 of file CCSprite.h.

来源:CCSprite参考文档。

您可以使用ccc3()轻松构建一个ccColor3B结构:

ccc3(const GLubyte r, const GLubyte g, const GLubyte b)

Reference: ccColor3B reference.


6
Justin,谢谢,那正是我正在做的...当然,额外的诀窍是正确设置textureRect!!! - poundev23

5
我在cocos2d食谱中找到了答案。以下代码源自该书的第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的微小的“blank.png”,您可以生成任意大小和颜色的实色矩形精灵。


3
我从来没有能够让CCSprite以那种方式工作。我只是使用CCLayerColor。
CCLayerColor* layercolorHalftransparentred = [CCLayerColor layerWithColor:ccc4(255, 0, 0, 128)];

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接