我有一个多边形,我使用纹理和 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];
任何帮助表示赞赏。