gpt4 book ai didi

cocos2d-x - 在cocos2d-x中动态更新颜色数据

转载 作者:行者123 更新时间:2023-12-03 06:45:15 25 4
gpt4 key购买 nike

我想在cocos2d-x中通过更新 Sprite 的原始颜色数据来创建一些效果,cocos2d-x是否提供任何方法来做到这一点?

更新:我的缓冲区每个像素为 4 字节 (A-R-G-B),视口(viewport)尺寸为 640x480。因此,缓冲区的长度为 640 * 480 * 4 = 1228800 字节,我经常更新其内容。

最佳答案

此解决方案会在每次更改纹理时重新生成纹理。注意:此代码中的纹理使用 RGBA 格式 - 而不是 ARGB。

数据(/texel)数组m_TextureData和 Sprite 仅分配一次,但Texture2D对象每次都必须释放并重新创建,这可能会产生性能问题。

注意:类名是 Cocos2d-x 3.1.x 中的新名称。在主循环中,有一个供 2.2.x 用户使用的替代部分。要使用该类,您还必须使用旧的类名(例如 ccColor4B、CCTexture2D、CCSprite)。

在标题中:

Color4B    *m_TextureData;
Texture2D *m_Texture;
Sprite *m_Sprite;

实现中:

int w = 640; // width  of texture
int h = 480; // height of texture

m_TextureData = new Color4B[w * h];

直接设置颜色 - 例如:

Color4B white;
white.r = 255;
white.g = 255;
white.b = 255;
white.a = 255;
m_TextureData[i] = white; // i is an index running from 0 to w*h-1

使用数据初始化纹理:

CCSize contentSize;
contentSize.width = w;
contentSize.height = h;

m_Texture = new Texture2D;
m_Texture->initWithData(m_TextureData, kCCTexture2DPixelFormat_RGBA8888, w, h, contentSize);

使用此纹理创建一个 Sprite :

m_Sprite = Sprite::createWithTexture(m_Texture);
m_Sprite->retain();

将 m_Sprite 添加到场景中

在主循环中:
要更改纹理的颜色/纹理,请动态修改 m_TextureData:

m_TextureData[i] = ...;

在 Cocos2d-x 2.x 中:
在 2.2.x 中,您实际上必须释放旧纹理并创建新纹理:

m_Texture->release(); // make sure that ccGLDeleteTexture() is called internally to prevent memory leakage

m_Texture = new Texture2D;
m_Texture->initWithData(m_TextureData, kCCTexture2DPixelFormat_RGBA8888, w, h, contentSize);

m_Sprite->setTexture(m_Texture); // update sprite with new texture

在 Cocos2d-x 3.1.x 中

m_Texture->updateWithData(m_TextureData, 0, 0, w, h);

稍后,别忘了清理。
在析构函数中:

m_Sprite->release();
m_Texture->release();
delete [] m_TextureData;

关于cocos2d-x - 在cocos2d-x中动态更新颜色数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23881187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com