【问题标题】:Unable to display Menu MenuItemImage in cocos2dxcocos2dx中无法显示菜单MenuItemImage
【发布时间】:2017-05-07 13:16:58
【问题描述】:

目前,我正在尝试在 cocos2dx 中显示 Menu(MenuItemImage) 但它没有显示出来。 Sprite 正常显示。我用谷歌搜索但没有解决方案。我很想从你那里得到一些提示或例子!

bool GameLayer::init(int level)
{
    if (!Layer::init())
        return false;

    auto moreButton = MenuItemImage::create("more.png","more.png",[](Ref*sender){});
    moreButton->setPosition(Vec2(WINSIZE.width /2.0,WINSIZE.height / 2.0));

    this->addChild(moreButton, ZOrder::Enemy);

    auto menu = Menu::create(moreButton, NULL);
    this->addChild(menu);
    menu->setPosition(WINSIZE.width / 2.0, WINSIZE.height / 2.0);

    initBackground(); 
    return true;
}


void GameLayer::initBackground()
{
    auto bgForCharacter = Sprite::create("Background1.png");
    bgForCharacter->setAnchorPoint(Point(0, 1));
    bgForCharacter->setPosition(Point(0, WINSIZE.height));
    addChild(bgForCharacter, ZOrder::BgForCharacter);

    auto bgForPuzzle = Sprite::create("Background2.png");
    bgForPuzzle->setAnchorPoint(Point::ZERO);
    bgForPuzzle->setPosition(Point::ZERO);
    addChild(bgForPuzzle, ZOrder::BgForP);
    //TODO
}

以下是在头类中。

 enum ZOrder
    {
        BgForCharacter = 0,
        BgForPuzzle,
        Enemy,
        EnemyHp,
        Char,
        CharHp,
        Ball,
        Level,
        Result,
    };

【问题讨论】:

  • WINSIZE 的值是多少?
  • 它是“#define WINSIZE Director::getInstance()->getWinSize()”

标签: c++ cocos2d-x cocos2d-x-3.0


【解决方案1】:

您可以假设MenuMenuItem 不同类型的容器或父级。如果你有单个MenuItem,则无需设置MenuItem的位置,设置他的父级(菜单)的位置。

不要将MenuItem添加到SceneLayer,只需传入Menucreate()方法即可。当您传入 create 方法时,它将作为子级添加到 Menu

bool GameLayer::init(int level)
{
    if (!Layer::init())
        return false;

    auto moreButton = MenuItemImage::create("more.png","more.png",[](Ref*sender){});

    auto menu = Menu::create(moreButton, NULL);        
    menu->setPosition(WINSIZE.width / 2.0, WINSIZE.height / 2.0);
    this->addChild(menu);

    initBackground(); 
    return true;
}

如果Menu 中有多个MenuItem,那么我们需要设置每个MenuItem 的位置。

MenuItem 位置对应于他的父菜单,因此根据您的代码,您将 Menu 设置在屏幕的中心,然后将相同的偏移量设置为他的子项,因此 MenuItem 位于右上角(可能不可见。)

【讨论】:

  • 我已经更新了代码。菜单不显示。也许是因为我添加到其他 Sprite 中的 ZOrder?
  • 您的代码在 auto menu = Menu::create(moreButton,NULL); 处给了我运行时异常,因为 moreButton 已经添加。无法再次添加。
  • 您使用的是哪个版本的 cocos2d-x ?我正在使用 v3.15
猜你喜欢
  • 2017-05-21
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2016-11-24
  • 2020-11-26
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多