使用ccs制作的地图,使用setColor无法改变颜色

通过cocostudio制作了一副地图
self.node = SceneReader:sharedSceneReader():createNodeWithSceneFile(“map3.json”)
self:addChild(self.node,0,1)

在程序中使用,地图分为好几个层
self.sister2 = self.node:getChildByTag(10176)
self.sister5 = self.node:getChildByTag(10175)
得到这两个层

现在我想把这两个层通过setColor函数变个颜色
方式如下
self.sister2:setColor(ccc3(255,0,0))
self.sister5:setColor(ccc3(255,0,0))

可是在程序中地图颜色没有变化,请问这是为什么呢?

ps:骨骼动画也不能通过setColor改变颜色…求救~

试试这种方式 应该是要遍历所有节点吧 。:12:

void setColorNode(UIWidget* node,const ccColor3B &color3)
{
if (dynamic_cast<UIWidget*>(node))
{
node->setColor(color3);
}

CCArray *pArray = node->getChildren();
CCObject *obj;
CCARRAY_FOREACH(pArray, obj)
{
    UIWidget *tem = (UIWidget*)obj;
    setColorNode(tem,color3);
}

}

我遍历所有子节点
local child2 = self.sister2:getChildren()
for i=0,child2:count()-1 do
child2:objectAtIndex(i):setColor(ccc3(255,0,0))
end

结果还是没变颜色,UIWidget这个东西是ui的吧…

不管是UI的还精灵什么的 你setColor都是根节点在变色,要遍历的话需要递归的 你刚这只是第一层的子节点 节点树可能是多层的。
setColorNode(tem,color3); 函数里面的子节点继续调用。。。这个函数。 你可以试试 不行我就不知道了 :12:

或者可以用shader进行渲染~

我找到了,是你说的那个原因.
我这个sister2层,下面还有一个子节点,这个子节点又有个子节点…
这最后一个子节点才是 CCSprite(即需要改变的东西,一直找到需要改变的内容,然后setColor就好了)

谢谢哈:7:请吃饭

可以就好。。。 :7: