如何使用setBlendFunc将CCSprite转换为黑白/灰色

时间:2012-01-05 05:47:59

标签: ios cocos2d-iphone

是否可以使用setBlendFunc将CCSprite设为黑白色?如果是,请告诉我们该怎么做。

更多详情:

我必须让我的游戏精灵(背景,角色)在特定时间点变为灰色/黑色和白色。我不想为此拍摄另一张照片。我试过CCTexture2DMutable。但问题是它需要额外的内存相同的精灵。

有没有办法使用一个蒙版图像并使所有精灵变为灰度。 请帮忙。

2 个答案:

答案 0 :(得分:2)

这在数学上不是正确的灰度,但看起来是黑色&白:

// setup grayscaling:
GLfloat rgba[4] = { 0.65f, 0.65f, 0.65f, 1.0f };
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB );
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, rgba );
glTexEnvi( GL_TEXTURE_ENV, GL_SRC0_RGB, GL_CONSTANT );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
glTexEnvi( GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
// ... glDrawArrays() here ...
// turn off grayscaling:
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

将此代码插入CCSprite绘图方法。 0.65f的{​​{1}}值是通过实验设置的,请尝试对其进行调整。

答案 1 :(得分:1)

不可能通过setBlendFunc这样做,但可以使用CCMutableTexture完成。如果这是一个可行的替代方案,我将发布所需的代码。