Невозможно изменить непрозрачность элементов Cocos2d-x MenuItemToggle

Я пытаюсь определить, почему непрозрачность не влияет 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);

1

Решение

После дальнейшего анализа я обнаружил, что setCascadeOpacityEnabled(true) для самого MenuItemToggle требуется, чтобы на него влияла непрозрачность (в том числе при настройке непрозрачности через родительский контейнер Menu). Это поведение отличается от других классов 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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]