是否有一种方法,可能是ccBlendFunc,它允许我动态着色精灵而不影响纯白色(255,255,255),纯黑色(0,0,0)和纯透明(alpha = 255) )像素?
使用默认的混合功能并在CCSprite上设置sprite.color会将白色像素重新着色为指定ccColor3B值的任何值,这对我来说是不合需要的。
答案 0 :(得分:1)
使用着色器。如果您使用的是cocos2d 2.1版,请使用ccShader_PositionTextureColor_frag(由CCSprite用于渲染纹理和其他类),复制到此处
#ifdef GL_ES
precision lowp float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform sampler2D CC_Texture0;
void main()
{
gl_FragColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
}
您想要在main()中更改该行以跳过要跳过的片段。 CCSprite将'sprite.color'属性写入v_fragmentColor(查看代码,有'预乘alpha'变体)。你想在texture2D(CC_Texture0,v_texCoord).a == 0和其他情况下修改v_fragmentColor。
我会扩展CCSprite以使用这个新的着色器(即避免直接使用内置于cocos2d的着色器,有自己的试验和错误位置)。让着色器执行您想要的操作后,在类中添加逻辑以将新着色器程序放在CCShaderCache中,并从那里检索它。