如何对动画Armature变成灰色 shader使用

function ArmatureSetGray(armature)
– ccs.Armature:getBoneDic()
local locBoneDic = armature:getBoneDic()
for k,v in pairs(locBoneDic) do
local bone = v
if bone then
local detector = bone:getColliderDetector()
if bone.getDisplayRenderNode then
local node = bone:getDisplayRenderNode()
SpriteSetGray(node)
end
end
end

end
这样不会变灰,有几帧是灰色的,怎么解释

bone:getDisplayRenderNode()是指骨骼当前的图片,但是有的骨骼在不同的动作中可能不是同一图片,需要改用bone->getDisplayManager()->getDecorativeDisplayList();
但是lua里这个接口取出来是空的,所以我直接试了C++的接口代码如下(但是最终效果还是有点问题,有些帧会重叠,我也查不出问题在哪里了,如果你能完美解决请务必告诉我)

cocostudio::Bone * bone=(cocostudio::Bone *)tolua_tousertype(L,1,0);
int state = lua_tointeger(L,2);

GLProgramState *glState = getGLstate(state);
if (glState)
{
    auto ls=bone->getDisplayManager()->getDecorativeDisplayList();
    for (int i=0;i<ls.size();i++)
    {
        auto e=ls.at(i);
        auto disnode=e->getDisplay();
        if (disnode)
        {
            disnode->setGLProgramState(glState);
        }
    }
    return 1;
}
return 0;