首先,我将在看到代码之前解释我要做什么,用户可以单击PLAY按钮,然后单击,显示一个弹出菜单,该菜单包含2个MenuItemSprite,用于与机器人或朋友一起玩,对于要使用的MenuItemImage在2 MenuItemSprite周围显示一个小的背景。

问题是当我想单击菜单内的MenuItemSprite时,什么也没有发生,但是当我将启用Background设置为false时,一切都好,没有任何问题,但是我不希望这种解决方案,因为我在另一个背景内(几乎透明)。如果用户单击此背景,则他可以自动隐藏菜单,因此我说将set设置为false会导致背景(窗口)和背景(菜单)之间出现混淆。

代码:

//Background (Scene)
    background=Sprite::create(BACKGROUND);
        background->setPosition(SonarCocosHelper::UI::GetScreenCenter());
        background->setOpacity(0);
        this->addChild(background,1);

     //Background Menu
        MenuItemImage * overlayWindowItem=MenuItemImage::create(GAME_OVER_WINDOW,GAME_OVER_WINDOW,GAME_OVER_WINDOW,NULL);
        //overlayWindowItem->setEnabled(false);

        //FRIEND ITEM
        MenuItemSprite * friendItem=MenuItemSprite::create(Sprite::create(FRIEND_BUTTON), Sprite::create(FRIEND_BUTTON),CC_CALLBACK_1(MenuScene::goToPlay,this));
        friendItem->setTag(PLAY_WITH_FRIEND);
        friendItem->setPosition(Vec2(-overlayWindowItem->getContentSize().width/4,friendItem->getPositionY()));

        //BOT ITEM
        MenuItemSprite * botItem=MenuItemSprite::create(Sprite::create(BOT_BUTTON), Sprite::create(BOT_BUTTON),CC_CALLBACK_1(MenuScene::goToPlay,this));
        botItem->setTag(PLAY_WITH_BOT);
        botItem->setPosition(Vec2(overlayWindowItem->getContentSize().width/4,botItem->getPositionY()));

//menu
 menu=Menu::create(overlayWindowItem,friendItem,botItem,NULL);
    menu->setPosition(Vec2(SonarCocosHelper::UI::GetScreenCenter().x,SonarCocosHelper::UI::GetScreenCenter().y+screenSize.height));
    this->addChild(menu,1);


我如何避免在MenuItemImage和MenuItemSprite之间混淆,我想单击MenuItemSprite,MenuItemImage只是一个背景。

谢谢,

最佳答案

正如我在您的代码中看到的那样,为什么要使用overlayWindowItem作为MenuItemImage?您没有调用任何函数(在代码中设置为NULL)。
只需将GAME_OVER_WINDOW作为精灵即可。如果我说错了,请纠正我。

关于c++ - 如何避免在Cocos2d-x 3.15.1中的MenuItemImage和MenuItemSprite之间发生冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45926631/

10-09 19:05