Это решение регенерирует текстуру каждый раз, когда она изменяется. Примечание: текстура в этом коде использует формат RGBA, а не ARGB.
Массив данных (/texel) m_TextureData и спрайт выделяются только один раз, но объект 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;
person
n-o-d
schedule
03.06.2014
cocos2d::RenderTexture
есть вариант:initWithWidthAndHeight (int w, int h, Texture2D::PixelFormat format)
- person GameDeveloper   schedule 27.05.2014