标题手段:当我们改变父节点或透明时的颜色。默认是不会影响孩子的节点。
作为交换组看到朋友说可以通过设置相关的参数变化的子节点来实现属性的效果,看了看源代码,记录下来:
引擎版本号为:2.1.4
引擎中诸如CCSprite 设置颜色的时候是使用基类:CCNodeRGBA中的setColor 方法的。该方法的代码:
void CCNodeRGBA::setColor(const ccColor3B& color) { _displayedColor = _realColor = color; if ( _cascadeColorEnabled ) { ccColor3B parentColor = ccWHITE; CCRGBAProtocol* parent = dynamic_cast<CCRGBAProtocol*>(m_pParent); if( parent && parent->isCascadeColorEnabled() ) { parentColor = parent->getDisplayedColor(); } updateDisplayedColor(parentColor); } }
这里面有一个条件推断:_cascadeColorEnabled 这个就是用来设置父节点的颜色的值影响子节点的颜色的。这种方法中主要是得到父节点的颜色值,然后在updateDisplayedColor方法中通过遍历全部的子节点,调用其改动颜色的方法来达到效果。
相同的,在设置透明度方法中,也有类似的效果。通过设置_cascadeOpacityEnabled 属性来实现需求。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
时间: 2024-10-11 22:51:42