下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

详解Cocos2D-X中的开关菜单类MenuItemToggle

作者:课课家教育     来源: http://www.kokojia.com点击数:1153发布时间: 2016-04-27 10:10:10

标签: Cocos2D开关Cocos2D-X开关菜单Cocos2D-X技巧

  我们在玩手机游戏的时候常会看到一些游戏菜单的开关转换,同学们是不是对这些游戏菜单的制作都很感兴趣?那么在Cocos2d-x中是怎么实现的呢?接下来我们就一起来探讨一下Cocos2D-X中的开关菜单的类MenuItemToggle。

  开关菜单是MenuItemToggle类实现的,它是一种可以进行两种状态切换的菜单。它可以通过下面的函数创建:

  static MenuItemToggle*createWithCallback (

  const ccMenuCallback & callback, //菜单操作的回调函数指针

  MenuItem * item, //进行切换的菜单项

  ...

  )

  从第二个参数开始都是MenuItem类的实例对象,它们是开关菜单显示的菜单项,它们可以是文本、图片和精灵类型的菜单项,但是最后不用忘记NULL结尾。

  下面代码是简单形式的文本类型的开关菜单:

  auto toggleMenuItem =MenuItemToggle::createWithCallback(

  CC_CALLBACK_1(HelloWorld::menuItem1Callback,this),

  MenuItemFont::create("On" ),

  MenuItemFont::create("Off"),

  NULL );

  Menu* mn = Menu::create(toggleMenuItem,NULL);

  this->addChild(mn);

  在看过了简单形式的文本类型的开关菜单后,相信各位同学对于MenuItemToggle应该有一定了解了,接下来我们看看其它的经常实例,通过实例来学习MenuItemToggle类的高级应用~

  下面我们通过一个实例介绍一下其它的复杂类型的开关菜单的使用,这个实例如下图所示,是一个游戏音效和背景音乐设置界面,我们可以通过开关菜单实现这个功能,我们的美术设计师为每一个设置项目(音效和背景音乐)分别准备了以下图片。

 MenuItemToggle类开关菜单

  下面我们看看实例代码的实现,HelloWorldScene.cpp中使用MenuItemSprite菜单项的代码如下:

  bool HelloWorld::init()

  {

  if ( !Layer::init() )

  {

  return false;

  }

  Size visibleSize = Director::getInstance()->getVisibleSize();

  Point origin = Director::getInstance()->getVisibleOrigin();

  Sprite *bg = Sprite::create("menu/background.png");

  bg->setPosition(Point(origin.x + visibleSize.width/2,

  origin.y +visibleSize.height /2));

  this->addChild(bg);

  //音效

  auto soundOnMenuItem = MenuItemImage::create(

  "menu/on.png",

  "menu/on.png"); ①

  auto soundOffMenuItem = MenuItemImage::create(

  "menu/off.png",

  "menu/off.png"); ②

  auto soundToggleMenuItem = MenuItemToggle::createWithCallback(

  CC_CALLBACK_1(HelloWorld::menuSoundToggleCallback,this),

  soundOnMenuItem,

  soundOffMenuItem,

  NULL); ③

  soundToggleMenuItem->setPosition(

  Director::getInstance()->convertToGL(Point(818,220)));

  //音乐

  auto musicOnMenuItem =MenuItemImage::create(

  "menu/on.png",

  "menu/on.png"); ④

  automusicOffMenuItem =MenuItemImage::create(

  "menu/off.png",

  "menu/off.png"); ⑤

  auto musicToggleMenuItem = MenuItemToggle::createWithCallback(

  CC_CALLBACK_1(HelloWorld::menuMusicToggleCallback,this),

  musicOnMenuItem,

  musicOffMenuItem,

  NULL ); ⑥

  musicToggleMenuItem->setPosition(

  Director::getInstance()->convertToGL(Point(818,362)));

  //Ok按钮

  autookMenuItem = MenuItemImage::create(

  "menu/ok-down.png",

  "menu/ok-up.png");

  okMenuItem->setPosition(Director::getInstance()->convertToGL(Point(600,510)));

  Menu* mn = Menu::create(soundToggleMenuItem,

  musicToggleMenuItem,okMenuItem, NULL); ⑦

  mn->setPosition(Point::ZERO);

  this->addChild(mn);

  return true;

  }

  在上面代码第①是创建音效开的图片菜单项,第②行是创建音效关的图片菜单项,第③行代码是通过createWithCallback函数创建开关菜单项MenuItemToggle。类似的第④~⑥创建了背景音乐开关菜单项。第⑦行代码是通过上面创建的开关菜单项创建Menu对象。

  小结:

  OK,在看完了MenuItemToggle类的实例代码之后,本篇教程到这里也就结束了,希望各位同学在本篇教程中能有所收获~

赞(23)
踩(2)
分享到:
华为认证网络工程师 HCIE直播课视频教程