我正在使用cocos2d for iPhone v1.0.1庫爲iPhone編寫遊戲。爲了讓我的遊戲能夠正常工作,我需要在知道座標時檢查CCSprite中特定像素的顏色。我一直在尋找解決方案兩天,但我沒有找到任何工作。也許有人曾經這樣做過,並知道如何去做?如何在CCSprite中獲取特定像素的RGBA顏色
我另一個posibility將從CCSprite來創建一個UIImage的,如果這是更容易...
問候, jarektb
我正在使用cocos2d for iPhone v1.0.1庫爲iPhone編寫遊戲。爲了讓我的遊戲能夠正常工作,我需要在知道座標時檢查CCSprite中特定像素的顏色。我一直在尋找解決方案兩天,但我沒有找到任何工作。也許有人曾經這樣做過,並知道如何去做?如何在CCSprite中獲取特定像素的RGBA顏色
我另一個posibility將從CCSprite來創建一個UIImage的,如果這是更容易...
問候, jarektb
如果你的精靈是顯示在屏幕上,你可以使用glReadPixels功能。它應該是這樣的(其中,在第二行上x
和y
是座標):
ccColor4B *buffer = malloc(sizeof(ccColor4B));
glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
ccColor4B color = buffer[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
好的。你可以看看這裏的'''CCMutableTexture2D'':https://github.com/manucorporat/AWTextureFilter/blob/master/AWTextureFilter/CCTexture2DMutable.h。它有一個方法名'''pixelAt:''',它可以讓你檢索代表給定位置像素的''''ccColor4B'''。 – 2012-07-31 08:29:33
不幸的是,它仍然沒有解決我的問題,因爲我有一些CCSprites,我能夠從他們那裏得到一個CCTexture2D,但我沒有看到任何方式將它轉換成CCMutableTexture2D ... – jarektb 2012-07-31 09:22:43
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類或子類。
這似乎是一個古老的話題,但我在這裏發佈了答案,因爲這是我在剛剛遇到同樣的困境時在谷歌上的第一次打擊。
我怎麼能得到精靈中的平均顏色 – 2013-03-06 10:39:20
不再有效(Cocos2d 3.x) – 2014-11-14 14:39:04
您是否找到解決問題的方法? – 2014-04-01 05:47:47
很難說。 Yannick L.的aswer形式不是我正在尋找的(alpha的問題),而當McDevon回答我時,我正在做其他事情,並沒有真正的時間來檢查解決方案。 – jarektb 2014-04-24 22:56:58