实例介绍Cocos2d-x开关菜单

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

  1. static MenuItemToggle*createWithCallback  (
  2. const ccMenuCallback &      callback,            //菜单操作的回调函数指针
  3. MenuItem *    item,                                          //进行切换的菜单项
  4. ...
  5. )

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

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

  1. auto toggleMenuItem =MenuItemToggle::createWithCallback(
  2. CC_CALLBACK_1(HelloWorld::menuItem1Callback,this),
  3. MenuItemFont::create("On" ),
  4. MenuItemFont::create("Off"),
  5. NULL );
  6. Menu* mn = Menu::create(toggleMenuItem,NULL);
  7. this->addChild(mn);

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

实例介绍Cocos2d-x开关菜单

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

  1. bool HelloWorld::init()
  2. {
  3. if ( !Layer::init() )
  4. {
  5. return false;
  6. }
  7. Size visibleSize = Director::getInstance()->getVisibleSize();
  8. Point origin = Director::getInstance()->getVisibleOrigin();
  9. Sprite *bg = Sprite::create("menu/background.png");
  10. bg->setPosition(Point(origin.x + visibleSize.width/2,
  11. origin.y +visibleSize.height /2));
  12. this->addChild(bg);
  13. //音效
  14. auto soundOnMenuItem = MenuItemImage::create(
  15. "menu/on.png",
  16. "menu/on.png");                                                                        ①
  17. auto soundOffMenuItem = MenuItemImage::create(
  18. "menu/off.png",
  19. "menu/off.png");                                                                        ②
  20. auto soundToggleMenuItem = MenuItemToggle::createWithCallback(
  21. CC_CALLBACK_1(HelloWorld::menuSoundToggleCallback,this),
  22. soundOnMenuItem,
  23. soundOffMenuItem,
  24. NULL);                                                            ③
  25. soundToggleMenuItem->setPosition(
  26. Director::getInstance()->convertToGL(Point(818,220)));
  27. //音乐
  28. auto musicOnMenuItem  =MenuItemImage::create(
  29. "menu/on.png",
  30. "menu/on.png");                                                                        ④
  31. automusicOffMenuItem  =MenuItemImage::create(
  32. "menu/off.png",
  33. "menu/off.png");                                                                        ⑤
  34. auto musicToggleMenuItem = MenuItemToggle::createWithCallback(
  35. CC_CALLBACK_1(HelloWorld::menuMusicToggleCallback,this),
  36. musicOnMenuItem,
  37. musicOffMenuItem,
  38. NULL );                                        ⑥
  39. musicToggleMenuItem->setPosition(
  40. Director::getInstance()->convertToGL(Point(818,362)));
  41. //Ok按钮
  42. autookMenuItem  = MenuItemImage::create(
  43. "menu/ok-down.png",
  44. "menu/ok-up.png");
  45. okMenuItem->setPosition(Director::getInstance()->convertToGL(Point(600,510)));
  46. Menu* mn = Menu::create(soundToggleMenuItem,
  47. musicToggleMenuItem,okMenuItem, NULL);                                   ⑦
  48. mn->setPosition(Point::ZERO);
  49. this->addChild(mn);
  50. return true;
  51. }

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

上一篇:oracle中找出某个字段中有非数字型的记录


下一篇:winfrom 关闭别的应用程序的窗体或者弹出框(winform 关闭句柄)