我想确定为什么不透明度不会影响 CCMenuItemToggle 项?直接在对象上调用 setOpacity()以及调用 FadeTo()等操作或降低其父级的不透明度时都是如此。
我使用Cocos2dx v2.2.6和v3.8.1对此进行了测试,两者都是相同的。
auto item1 = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuCallback, this),
MenuItemImage::create("CloseNormal.png", "CloseNormal.png"),
MenuItemImage::create("CloseSelected.png", "CloseSelected.png"),
nullptr);
// create menu, it's an autorelease object
auto menu = Menu::create(item1, NULL);
menu->setPosition(256, 256);
this->addChild(menu, 1);
// Nothing I do to try and make 'item1' set to 0% opacity works. It is always 100% opaque.
menu->setCascadeOpacityEnabled(true);
menu->setOpacity(0.0);
item1->setOpacity(0.0);
item1->getParent()->setCascadeOpacityEnabled(true);
答案 0 :(得分:1)
经过进一步分析后,我发现在MenuItemToggle本身上调用setCascadeOpacityEnabled(true)
需要它受不透明度的影响(包括通过父菜单容器设置不透明度时)。此行为与其他CCMenuItem类不同,并将我抛弃。
为了减少在每个切换项上调用SetCascadeOpacityEnabled(true)的需要,可以选择在主CCMenuItem :: initWithTarget构造函数中设置选项。即,
bool CCMenuItem::initWithTarget(CCObject *rec, SEL_MenuHandler selector)
{
setAnchorPoint(ccp(0.5f, 0.5f));
m_pListener = rec;
m_pfnSelector = selector;
m_bEnabled = true;
m_bSelected = false;
// Make sure opacity and color values cascade to children
this->setCascadeColorEnabled(true);
this->setCascadeOpacityEnabled(true);
return true;
}