我正在使用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