【问题标题】:Cannot change opacity of Cocos2d-x MenuItemToggle elements无法更改 Cocos2d-x MenuItemToggle 元素的不透明度
【发布时间】:2015-09-25 01:15:06
【问题描述】:

我试图确定为什么不透明度不会影响 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);

【问题讨论】:

    标签: c++ cocos2d-iphone cocos2d-x opacity cocos2d-x-3.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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 1970-01-01
      • 2011-01-22
      • 2015-02-22
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多