テクスチャと glDrawArray を使用して塗りつぶすポリゴンがあります (このチュートリアルで説明されている方法を使用します: http://www.raywenderlich.com/32954/how-to-create-a-game-like-tiny-wings-with -cocos2d-2-x-part-1 )。
ゲームプレイ中にランダムに生成される単色を使用してポリゴンを塗りつぶしたいと考えています。チュートリアルの手法を使用してこれを行うには、単色のテクスチャを動的に作成する必要があります (たとえば、1x1 の赤い正方形を生成し、それを使用してポリゴンを塗りつぶすことができます)。
を使用してスプライトの色を変更する方法と同様に、cocos2d でテクスチャの色を変更する方法はあります[mySprite changeColor:ccRed]
か? 最初のテクスチャ、たとえば 1x1 の白い正方形がある場合、そのテクスチャを 1x1 の赤い正方形に変更する方法はありますか?
私はすでにCCRenderTextureを使用してみました(このチュートリアルで説明されているように:http://www.raywenderlich.com/33266/how-to-create-dynamic-textures-with-ccrendertexture-in-cocos2d-2-x)が、多数のポリゴンを塗りつぶしますが、この方法は非常に遅いことがわかります。
また、次のコードを使用してテクスチャを作成しようとしました。
// fill with solid red
GLubyte buffer[3] = {255, 0, 0};
CCTexture2D *texture = [[CCTexture2D alloc] initWithData:buffer pixelFormat:kCCTexture2DPixelFormat_RGB888 pixelsWide:1 pixelsHigh:1 contentSize:m];
上記はかなりうまく機能しますが、CCSprite からテクスチャを取得するよりもまだ遅くなります。基本的に、動的テクスチャをできるだけ効率的に生成する方法を探しています。
ポリゴンを塗りつぶすために使用しているコードは次のとおりです。
GLubyte buffer[3] = {arc4random()%256,arc4random()%256,arc4random()%256};
CGSize size;
size.width = 2; size.height = 2;
CCTexture2D *texture = [[CCTexture2D alloc] initWithData:buffer pixelFormat:kCCTexture2DPixelFormat_RGB888 pixelsWide:1 pixelsHigh:1 contentSize:size];
ccTexParams params = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
[texture setTexParameters:¶ms];
ccGLBindTexture2D([texture name]);
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, array); //where array is an array of points defining a polygon
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, array);
glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)4);
[texture dealloc];
どんな助けでも大歓迎です。