cocos2d for iPhone v1.0.1 ライブラリを使用して iPhone 用のゲームを作成しています。ゲームを正常に動作させるには、座標がわかっているときに CCSprite の特定のピクセルの色を確認する必要があります。私は2日間解決策を探していましたが、うまくいくものは見つかりませんでした. たぶん、誰かが以前にこれを行い、その方法を知っていますか?
これが簡単であれば、CCSpriteからUIImageを作成することもできます...
こんにちは、ジャレクトブ
cocos2d for iPhone v1.0.1 ライブラリを使用して iPhone 用のゲームを作成しています。ゲームを正常に動作させるには、座標がわかっているときに CCSprite の特定のピクセルの色を確認する必要があります。私は2日間解決策を探していましたが、うまくいくものは見つかりませんでした. たぶん、誰かが以前にこれを行い、その方法を知っていますか?
これが簡単であれば、CCSpriteからUIImageを作成することもできます...
こんにちは、ジャレクトブ
どうやら、スプライトを含むカラー バッファに直接アクセスすることはできません。ただし、スプライトを 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 のカテゴリまたはサブクラスに簡単に変換することもできます。
これは古いトピックのようですが、同じジレンマを抱えていたときにこれがグーグルで最初にヒットしたため、ここに回答を投稿しました.
スプライトが画面に表示されている場合は、glReadPixels関数を使用できます。次のようになります ( 2 行目のx
とy
は座標です)。
ccColor4B *buffer = malloc(sizeof(ccColor4B));
glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
ccColor4B color = buffer[0];