2012-07-27 142 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