2012-07-27 148 views
4

我正在使用cocos2d for iPhone v1.0.1庫爲iPhone編寫遊戲。爲了讓我的遊戲能夠正常工作,我需要在知道座標時檢查CCSprite中特定像素的顏色。我一直在尋找解決方案兩天,但我沒有找到任何工作。也許有人曾經這樣做過,並知道如何去做?如何在CCSprite中獲取特定像素的RGBA顏色

我另一個posibility將從CCSprite來創建一個UIImage的,如果這是更容易...

問候, jarektb

+0

您是否找到解決問題的方法? – 2014-04-01 05:47:47

+0

很難說。 Yannick L.的aswer形式不是我正在尋找的(alpha的問題),而當McDevon回答我時,我正在做其他事情,並沒有真正的時間來檢查解決方案。 – jarektb 2014-04-24 22:56:58

回答

4

如果你的精靈是顯示在屏幕上,你可以使用glReadPixels功能。它應該是這樣的(其中,在第二行上xy是座標):

ccColor4B *buffer = malloc(sizeof(ccColor4B)); 
glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 
ccColor4B color = buffer[0]; 
+0

謝謝你的回答。您的解決方案有效,但並不完全符合我的需要。因爲您從屏幕上讀取像素的顏色。當CCSprite包含一些透明度時,我會獲得背景顏色。我需要能夠從CCSprite獲取RGBA像素顏色。所以當背景色是RGBA(255,255,255,255)而CCSprite是RGBA(255,0,0,127)時,我應該得到RGBA(255,0,0,127),並且你的解決方案給了我RGBA(255,128,128,255); – jarektb 2012-07-30 16:14:28

+1

好的。你可以看看這裏的'''CCMutableTexture2D'':https://github.com/manucorporat/AWTextureFilter/blob/master/AWTextureFilter/CCTexture2DMutable.h。它有一個方法名'''pixelAt:''',它可以讓你檢索代表給定位置像素的''''ccColor4B'''。 – 2012-07-31 08:29:33

+0

不幸的是,它仍然沒有解決我的問題,因爲我有一些CCSprites,我能夠從他們那裏得到一個CCTexture2D,但我沒有看到任何方式將它轉換成CCMutableTexture2D ... – jarektb 2012-07-31 09:22:43

10

Appearantely不能被直接訪問包含該子畫面的顏色緩衝器。但是,您可以將精靈繪製到CCRenderTexture並從那裏讀取像素。

location = ccp(x * CC_CONTENT_SCALE_FACTOR(), y * CC_CONTENT_SCALE_FACTOR()); 

UInt8 data[4]; 

CCRenderTexture* renderTexture = [[CCRenderTexture alloc] initWithWidth:sprite.boundingBox.size.width * CC_CONTENT_SCALE_FACTOR() 
                   height:sprite.boundingBox.size.height * CC_CONTENT_SCALE_FACTOR() 
                  pixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 

[renderTexture begin]; 
[sprite draw]; 

glReadPixels((GLint)location.x,(GLint)location.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data); 

[renderTexture end]; 
[renderTexture release]; 

NSLog(@"R: %d, G: %d, B: %d, A: %d", data[0], data[1], data[2], data[3]); 

如果您使用的是視網膜屏幕,則必須考慮內容比例因子。

解決方案也可以很容易地變成CCSprite類或子類。

這似乎是一個古老的話題,但我在這裏發佈了答案,因爲這是我在剛剛遇到同樣的困境時在谷歌上的第一次打擊。

+0

我怎麼能得到精靈中的平均顏色 – 2013-03-06 10:39:20

+0

不再有效(Cocos2d 3.x) – 2014-11-14 14:39:04