4

我正在使用 cocos2d for iPhone v1.0.1 库为 iPhone 编写游戏。为了让我的游戏正常工作,当我知道坐标时,我需要检查 CCSprite 中特定像素的颜色。我一直在寻找解决方案两天,但我没有找到任何工作。也许有人以前做过这个并且知道怎么做?

如果这更容易的话,我的另一个可能性是从 CCSprite 创建一个 UIImage ......

问候, jarektb

4

2 回答 2

10

显然不能直接访问包含精灵的颜色缓冲区。但是,您可以将精灵绘制到 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-01-02T13:27:50.650 回答
4

如果您的精灵在屏幕上可见,您可以使用glReadPixels函数。它应该看起来像这样(其中xy第二行是坐标):

ccColor4B *buffer = malloc(sizeof(ccColor4B));
glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
ccColor4B color = buffer[0];
于 2012-07-27T12:30:44.257 回答