标題的意思是:當我們修改父節點的顔色或者透明度的時候,預設是不會對子節點産生影響的。在交流群裡看見網友說可以通過設定某個參數來達到修改子節點相關屬性的效果,就去看了看源碼,記錄下來:
引擎版本為: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 屬性來達到需求。