--引擎3.3final版本
--
-- Author: rex
-- Date: 2015-02-26 17:11:29
--
local shaderHelper = shaderHelper or {}
function shaderHelper:grayNode(node)
if node and type(node) == "userdata" then
--创建现有系统变灰fiter
local fiter = cc.GrayFilter:create()
fiter:initSprite(nil)
--判断是否ui控件
if node.getVirtualRenderer then
--9宫图获取9宫图中的sprite,注:getProtectedChildren方法自己在引擎中添加
if node.isScale9Enabled ~= nil and node:isScale9Enabled() then
local sp_children = node:getVirtualRenderer():getProtectedChildren()
for k,v in pairs(sp_children) do
self:grayNode(v)
end
else
node:getVirtualRenderer():getSprite():setGLProgram(fiter:getProgram())
end
else
node:setGLProgram(fiter:getProgram())
end
local children = node:getChildren()
for k,v in pairs(children) do
self:grayNode(v)
end
end
end
--清除shader效果
function shaderHelper:clearnShader(node)
if node and type(node) == "userdata" then
if node.getVirtualRenderer then
if node.isScale9Enabled ~= nil and node:isScale9Enabled() then
local sp_children = node:getVirtualRenderer():getProtectedChildren()
for k,v in pairs(sp_children) do
self:clearnShader(v)
end
else
node:getVirtualRenderer():getSprite():setGLProgram(cc.GLProgramCache:getInstance():getGLProgram("ShaderPositionTextureColor_noMVP"))
end
else
node:setGLProgram(cc.GLProgramCache:getInstance():getGLProgram("ShaderPositionTextureColor_noMVP"))
end
local children = node:getChildren()
for k,v in pairs(children) do
self:clearnShader(v)
end
end
end
return shaderHelper
注意:--getProtectedChildren 该方法是在源码库Scale9Sprite类自己添加,并且导出lua使用 C++代码如下
Vector<Node*> Scale9Sprite::getProtectedChildren()const
{
return _protectedChildren;
}