前段时间写项目的时候,发现需要将某个层淡入淡出。直接runAction
后发现,唉!没有任何效果。后来才知道,原来这个runAction
只是对当前的层有效。我就想了一个法子,递归的跑Action
。然而这样效率很低下。
后来偶然间想到,只是透明度的变化不能应用于子节点,我可不可以把当前设置透明度的函数重写成递归的函数,尝试了一下!果然可以!
void BaseLayer::setOpacity(GLubyte value) {
Layer::setOpacity(value);
dfsSetOpacity(this, value);
}
void BaseLayer::dfsSetOpacity(Node* node, GLubyte& value) {
for (int i = node->getChildrenCount() - 1; i >= 0; --i) {
dfsSetOpacity(node->getChildren().at(i), value);
node->getChildren().at(i)->setOpacity(value);
}
}
网友评论