2010-07-27 153 views
9

我一定錯過了一些東西!Cocos2d:純色矩形精靈?

我想創建一個實體矩形CCSprite,其背景色初始化爲特定的RGB值。我查看了所有文檔,找不到任何內容。

有沒有辦法將CCSprite的背景初始化爲特定的顏色? 我不想爲每個需要的顏色都包含純色PNG。

幫助!

回答

9

CCSprite具有ccColor3B類型的color屬性:

- (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) 

參考:ccColor3B參考。

+6

賈斯廷,謝謝你是我在做什麼...額外的技巧當然是設置textureRect正確! – poundev23 2010-07-29 14:02:31

+0

謝謝@ poundev23,那就是我一直在尋找 – aiham 2011-11-22 08:44:35

+0

小心,這似乎不適用於異步線程。 – GoldenJoe 2013-09-05 00:58:46

5

我在cocos2d cookbook找到答案。以下代碼源自該書的第一章,該書可免費預覽。

-(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',您可以生成具有任意大小和顏色的純色矩形精靈。

+2

對於那些外部圖像 – 2012-10-28 02:36:05

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 2014-08-20 07:02:08

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