4

cocos2d for iPhone v1.0.1 ライブラリを使用して iPhone 用のゲームを作成しています。ゲームを正常に動作させるには、座標がわかっているときに CCSprite の特定のピクセルの色を確認する必要があります。私は2日間解決策を探していましたが、うまくいくものは見つかりませんでした. たぶん、誰かが以前にこれを行い、その方法を知っていますか?

これが簡単であれば、CCSpriteからUIImageを作成することもできます...

こんにちは、ジャレクトブ

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]);

Retina ディスプレイを使用している場合は、コンテンツの倍率を考慮する必要があります。

ソリューションは、CCSprite のカテゴリまたはサブクラスに簡単に変換することもできます。

これは古いトピックのようですが、同じジレンマを抱えていたときにこれがグーグルで最初にヒットしたため、ここに回答を投稿しました.

于 2013-01-02T13:27:50.650 に答える
4

スプライトが画面に表示されている場合は、glReadPixels関数を使用できます。次のようになります ( 2 行目の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 に答える