加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x MenuItemToggle 实现开关按钮

发布时间:2020-12-14 21:21:13 所属栏目:百科 来源:网络整理
导读:最近做自己的塔防游戏的时候用到的,作为记录记载下来。 MenuItemToggle可以实现按钮的开关两种状态,类似”ON”-”OFF”. void SettingScene::addMenuItems(){ auto size=Director::getInstance()-getWinSize(); /*添加返回按钮*/ auto backMenuItem=MenuIt

最近做自己的塔防游戏的时候用到的,作为记录记载下来。

MenuItemToggle可以实现按钮的开关两种状态,类似”ON”->”OFF”.

void SettingScene::addMenuItems(){
    auto size=Director::getInstance()->getWinSize();

    /*添加返回按钮*/
    auto backMenuItem=MenuItemImage::create(
        "SettingSceneImages/backMenuItem_1.png","SettingSceneImages/backMenuItem_2.png",CC_CALLBACK_1(SettingScene::menuBackCallback,this));
    backMenuItem->setPosition(Point(size.width-backMenuItem->getContentSize().width/2,backMenuItem->getContentSize().height/2));
    this->addChild(backMenuItem,1);

    auto startWidth=backMenuItem->getContentSize().width+80; //起始横坐标(左上方第一个) 
    auto startHeight=size.height-backMenuItem->getContentSize().height/2-20; //起始纵坐标

    /*添加"打开关闭音乐"按钮*/
    _openMusicItem=MenuItemImage::create(
        "SettingSceneImages/openMusicItem_1.png","SettingSceneImages/openMusicItem_2.png"
        );
    _closeMusicItem=MenuItemImage::create(
        "SettingSceneImages/closeMusicItem_1.png","SettingSceneImages/closeMusicItem_2.png");
    //组合按钮
    auto setMusicMenuToggle=MenuItemToggle::createWithCallback(CC_CALLBACK_1(SettingScene::menuSetMusicCallback,this),_openMusicItem,_closeMusicItem,NULL);
    setMusicMenuToggle->setPosition(Point(startWidth,startHeight));


    /*添加“打开|关闭音效”按钮*/
    _openEffectItem=MenuItemImage::create(
        "SettingSceneImages/openEffectItem_1.png","SettingSceneImages/openEffectItem_2.png");
    _closeEffectItem=MenuItemImage::create(
        "SettingSceneImages/openEffectItem_1.png","SettingSceneImages/openEffectItem_2.png");

    //组合按钮
    auto setEffectMenuToggle=MenuItemToggle::createWithCallback(CC_CALLBACK_1(SettingScene::menuSetEffectCallback,_openEffectItem,_closeEffectItem,NULL);
    setEffectMenuToggle->setPosition(Point(300,400));


    /*添加“打开|关闭血条”按钮*/
    _openHpBarItem=MenuItemImage::create(
        "SettingSceneImages/openHpBarItem_1.png","SettingSceneImages/openHpBarItem_2.png");
    _closeHpBarItem=MenuItemImage::create(
        "SettingSceneImages/openHpBarItem_1.png","SettingSceneImages/openHpBarItem_2.png");
    //组合按钮
    auto setHpBarMenuToggle=MenuItemToggle::createWithCallback(CC_CALLBACK_1(SettingScene::menuSetHpBarCallback,_openHpBarItem,_closeHpBarItem,NULL);
    setHpBarMenuToggle->setPosition(Point(0,0));

    //总菜单
        auto menu=Menu::create(setMusicMenuToggle,setEffectMenuToggle,setHpBarMenuToggle,NULL);
        menu->setPosition(Point(0,0));
        this->addChild(menu,1);

}

首先, 创建两个 MenuItemImage,然后把他们都添加到了 MenuItemToggle 里面。这个类会管理当前应该显示的菜单项,同时会在开关元素之间进行一些切换。

注意,当创建 MenuItemImage 的时候,最好不设置回调函数(也可以把回调函数设置成了NULL),而是为 MenuItemToggle 类设置了回调函数。这样当 MenuItemImage 在 MenuItemToggle 中的时候,在 MenuItemImage 上的任何 selector 都不会被调用,而只有 MenuItemToggle的selector会被调用。当然,我们可以很容易地在回调函数里面区分,到底哪个菜单项是可见的。

也就是在MenuItemToggle这一层抽象层上,编写回调函数的时候不需要考虑下一层的具体,而是只是完成它的回调函数。


特别注意,坐标设置

我们在创建MenuItemImage项的时候不用设置坐标,而是指定MenuItemToggle的坐标。然后把Toggle添加到Menu里,这里有一个设置坐标的细节。 为了设置坐标方便,一般把Menu坐标设置为Point::ZERO,这样在向Menu添加菜单项的时候菜单项(MenuItemxxx)就可以直接写相对于实际屏幕的坐标了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读