在cocos2d-x开发中,有时候需要将一个彩色的CCSprite转为黑白色。
用普通的setColor(ccBLACK)肯定是不行的,这样设置出来的是一个全黑的图形,根本没有渐变和灰色的过度效果。
现在给出一种实现方法:
基本过程是:
1.得到彩色CCSprite;
2.创建个CCRenderTexture,将精灵的纹理复制进去;
3.根据CCRenderTexture创建一个CCImage;
4.通过CCImage->getData()就可获得纹理的内存地址啦~~
5.修改data,将RGB设置为相同数值;
6.根据修改后的data创建新的CCSprite并返回。
过程比较纠结,但代码还比较简单。
CCSprite *createGraySprite(const char* imageName)
{
// create CCSprite
CCSprite* sprite = CCSprite::create(imageName);
unsigned int width = sprite->getTexture()->getPixelsWide();
unsigned int height = sprite->getTexture()->getPixelsHigh();
// create CCRenderTexture base on the CCSprite
CCRenderTexture* r = CCRenderTexture::create(width, height);
r->beginWithClear(1, 1, 1, 0);
sprite->setPosition(ccp(width / 2.0, height/ 2.0)); // Node: set position here!
sprite->visit();
r