MenuItemToggle的使用

4 篇文章 0 订阅
2 篇文章 0 订阅

在使用Mneu的时候,我们通常会使用MenuItem来创建Menu,而MenuItem的子类有很多,如下图:


我们经常会使用到的就是MenuItemImage和MenuItemSprite,在这里,就讲讲MenuItemToggle的用处和用法。

MeniItemToggle:它在内部拥有一个MenuItem数组,用来负责展示不同的按钮状态。因为使用了一个菜单按钮的数组,所以此类的对象可以实现状态切换。

//通过容器来创建一个MenuItemToggle

 static MenuItemToggle * createWithCallback(const ccMenuCallback& callback, constVector<MenuItem*>& menuItems);

//通过一系列MenuItem来创建一个MenuItemToggle,最后要以NULL结尾

 static MenuItemToggle* createWithCallback(const ccMenuCallback& callback, MenuItem*item, ...) CC_REQUIRES_NULL_TERMINATION;

MenuItemToggle实现了显示内容的切换,所切换之后显示的内容由你在创建时所添加的MenuItem的内容和顺序有关,默认显示第一个MenuItem。

既然MenuItemToggle能够显示内容的切换,那么我们可以用它来实现单选按钮或者多选按钮之类的功能,点击显示选中状态,再次点击显示未选中状态。

在有些游戏的设置界面中,就有点击切换选中与没选中状态来实现是否开启或关闭音乐的功能,那么这个控件就可以通过MenuItemToggle来实现,如下图:


下面我们来实现这种控件:

首先创建MenuItemToggle,然后通过其创建Menu

 //选中状态精灵
 auto musicOnSpr=Sprite::createWithSpriteFrameName("Hook.png");
//未选中状态精灵
auto musicOffSpr=Sprite::createWithSpriteFrameName("unchecked.png");
//将精灵包装成MenuItem,以便创建MenuItemToggle
auto musicOn=MenuItemSprite::create(musicOnSpr, musicOnSpr);
auto musicOff=MenuItemSprite::create(musicOffSpr, musicOffSpr);

//创建MenuItemToggle,第一个参数是回调函数 后面依次是要显示的MenuItem,最后必须为NULL
MenuItemToggle* musicItemToggle=MenuItemToggle::createWithCallback(CC_CALLBACK_1(SetLayer::menuCallBack, this), musicOn,musicOff, NULL);

musicItemToggle->setPosition(Vec2(320, 457));

//通过MenuItemToggle创建Menu

auto menu=Menu::create(musicItemToggle,NULL);
menu->setPosition(Vec2(0, 0));
this->addChild(menu);
我们再来看看回调函数void SetLayer::menuCallBack(Ref* ref)

参数Ref表示被点击的MenuItem

void SetLayer::menuCallBack(Ref* ref)
{

    //将ref转换为MenuItemToggle对象
    auto item=(MenuItemToggle*)ref;

   /*获取当前显示内容的下标,可以通过下标知道当前控件所显示的内容,在创建MenuItemToggle时,第一个被添加MenuItemToggle的MenuItem的下标为0,第二个被添加到MenuItemToggle的MenuItem的下标为1,以此类推,在这里,显示musicOn时,getSelectedIndex的值为0,显示musicOff时,getSelectedIndex的值为1*/

   item->getSelectedIndex();

   //再根据显示内容实现不同操作

   ........

}

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值