cocos2dx中怎么使BMFont字体变灰?

如题,有没有人碰到过这样的问题?
1.用node里的setColor()不行,如果是纯色应该可以的,但既然用了BMFont那肯定不是纯色.
2.用网上找的这种方法是可以变灰但 字体位置设置会有问题,试了CC_MVPMatrix 和 CC_PMatrix方式都不行,求解。

http://www.cocos2d-x.org/forums/6/topics/49035?r=49104
3.难道只能让美术再出一套灰色的.:6:

:2: 没人理。。。

只能Shader了,要不就让美术弄图了。Shader的话,这里也有两篇可以参考下.
http://cn.cocos2d-x.org/tutorial/show?id=701
http://cn.cocos2d-x.org/tutorial/show?id=1857
其实测试例里面也有变为灰度图的例子,你可以找下。

图片的可以,但用在BMFont字体上变灰效果是有了,可是设置字体的位置没用了。

能把Demo给我吗?难道无意中发现了个Bug…

你可以挂个灰的shader
test cpp里有例子

随便整个BMFont字体变灰,然后设置位置,你就会发现了。我的变灰代码是这样写的:

static void turnGray(Node* s)
{
GLProgram* program = GLProgramCache::getInstance()->getGLProgram(“gard_key”);
if (program == NULL) {
const GLchar* vsh = “attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;

void main()
{
gl_Position = CC_PMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}”;

    const GLchar* fsh = "varying vec4 v_fragmentColor;\
    varying vec2 v_texCoord;\
    \
    void main()\
    {\
        vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);\
        float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114));\
        gl_FragColor = vec4(gray, gray, gray, v_orColor.a);\
    }";
    
    program = new GLProgram();
    program->autorelease();
    program->initWithByteArrays(vsh, fsh);
    CHECK_GL_ERROR_DEBUG();
    
    program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
    program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_TEX_COORD);
    program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORD);
    CHECK_GL_ERROR_DEBUG();
    
    program->link();
    CHECK_GL_ERROR_DEBUG();
    
    program->updateUniforms();
    CHECK_GL_ERROR_DEBUG();
    
    GLProgramCache::getInstance()->addGLProgram(program, "gray_key");
}
s->setGLProgram(program);

}
auto bm = Label::createWithBMFont(“res/fonts/na.fnt”, “abcd”);
addChild(bm);
turnGray(bm);

:9::3: 解决了,把这句 gl_Position = CC_PMatrix * a_position; 改成:gl_Position = CC_MVPMatrix * a_position;
不过之前我也这么改过,试了不行,不知道为何现在可以了。 感谢感谢。