是否可以使用setBlendFunc将CCSprite设为黑白色?如果是,请告诉我们该怎么做。
更多详情:
我必须让我的游戏精灵(背景,角色)在特定时间点变为灰色/黑色和白色。我不想为此拍摄另一张照片。我试过CCTexture2DMutable。但问题是它需要额外的内存相同的精灵。
有没有办法使用一个蒙版图像并使所有精灵变为灰度。 请帮忙。
答案 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完成。如果这是一个可行的替代方案,我将发布所需的代码。