c++ - 如何在 Cocos2d-x 3.15.1 中避免 MenuItemImage 和 MenuItemSprite 冲突

标签 c++ cocos2d-x game-engine

首先我会在看到代码之前解释我想要做什么,用户可以点击PLAY 按钮,点击后,会显示一个弹出式菜单Menu 包含 2 个 MenuItemSprite 用于与机器人或 friend 一起玩,对于 MenuItemImage 它用于显示一个小的背景 2 MenuItemSprite.

问题是当我想点击菜单内的 MenuItemSprite 时,什么也没有发生,但是当我设置启用背景为false时一切正常,没有任何问题,但我不想要这个解决方案,因为我有内部另一个背景(几乎透明)。如果用户点击这个背景,他可以隐藏自动菜单,所以我说设置启用背景为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 作为 Sprite 。如果我说错了什么,请纠正我。

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

相关文章:

c++ - 删除节点方法实际上并没有删除二叉搜索树中的节点。 C++

c++ - 改变第一个和最后一个字母的大小写 C++

android - 如何在 Eclipse for Android 上使用 cocos2d-x 进行编程的技巧

animation - Godot - 使用 2D Sprite 动画

c# - 碰撞声

java - 游戏专用3D环境系统

c++ - 析构函数中的无意递归调用

c++ - 按不同字段对结构队列进行排序

linux - 如何在 cocos2d-x v3.3 项目中将 SimpleAudioEngine 包含到 Linux 构建中?

c++ - cocos2d-x如何支持多线程