开关菜单是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);

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

下面我们看看实例代码的实现,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对象。

实例介绍Cocos2d-x开关菜单的更多相关文章

  1. 实例介绍Cocos2d-x精灵菜单和图片菜单

    精灵菜单类是MenuItemSprite,图片菜单类是MenuItemImage.由于MenuItemImage继承于MenuItemSprite,所以图片菜单也属于精灵菜单.为什么叫精灵菜单呢?那是 ...

  2. 【转】Android实例剖析笔记(二)--用实例讲解Andriod的开发过程,以NotesList为实例介绍Android的菜单机制

    原文网址:http://kb.cnblogs.com/page/78304/ 简介 android提供了三种菜单类型,分别为options menu,context menu,sub menu. op ...

  3. Cocos2d-x开发实例介绍帧动画使用

    下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画. 下面我们再看看具体的程序代码,首先看一下看H ...

  4. Cocos2d-x开发实例介绍特效演示

    下面我们通过一个实例介绍几个特效的使用,这个实例下图所示,下图是一个操作菜单场景,选择菜单可以进入到下图动作场景,在下图动作场景中点击Go按钮可以执行我们选择的特性动作,点击Back按钮可以返回到菜单 ...

  5. Cocos2d-x中__Dictionary容器以及实例介绍

    __Dictionary类在Cocos2d-x 2.x时代它就是CCDictionary类,它是模仿Objective-C中的NSDictionary类而设计的,通过引用计数管理内存.__Dictio ...

  6. Cocos2d-x中__Array容器以及实例介绍

    __Array类在Cocos2d-x 2.x时代它就是CCArray类.它是模仿Objective-C中的NSArray类而设计的,通过引用计数管理内存.__Array继承于Ref类,因此它所能容纳的 ...

  7. 实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D

    我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用.这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触 ...

  8. 实例介绍Cocos2d-x物理引擎:碰撞检测

    碰撞检测是使用物理引擎的一个重要目的,使用物理引擎可以进行精确的碰撞检测,而且执行的效率也很高.在Cocos2d-x 3.x中使用事件派发机制管理碰撞事件,EventListenerPhysicsCo ...

  9. 实例介绍Cocos2d-x物理引擎:HelloPhysicsWorld

    我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用物理引擎的开发过程,熟悉这些API的使用.这个实例的运行后的场景,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点生成一个新的 ...

随机推荐

  1. Shadow Mapping 的原理与实践(一)

    早在上世纪七十年代末,Williams在他的“Casting Curved Shadows on Curved Surface”一文中提出了名为Shadow Map的阴影生成技术.之后,他人在此基础上 ...

  2. JS同名方法,

    JS同名方法只会调用最后一个方法. JS中同时绑定多个事件,先绑定的先调用.后绑定的后调用.

  3. iOS开发——多线程OC篇&(十)多线程NSOperation基本使用

    NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. (3)最⼤大并发数的 ...

  4. 锁大全与 GDB调试

    1.innodb_lock_monitor:打开锁信息的方式 mysql> create table innodb_lock_monitor(id int) engine=InnoDB; Que ...

  5. PEAR:使用PHPDoc轻松建立你的PEAR文档

    对于一个开发人员,文档总是最感到头疼的事情之一.而且,很可能你对待文档会采取截然不同的2种态度: 当你使用别人的代码库的时候,最希望得到的是它的技术文档,尤其是当时间很紧,而你又不得不硬着头皮去读那些 ...

  6. 手机端的tab切换,响应式切换效果

    之前写过这些tab切换的效果,无论网页上还是手机端,网上也有很多的例子,这个好像是我参考网上,也不知道是哪里的了.总结了一下,就当保存下来了把. <!DOCTYPE html > < ...

  7. LeetCode48 Rotate Image

    题目: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwis ...

  8. 开启AsyncTask从网络加载图片

    /*AsyncTask 异步任务即做一些简单的异步处理 :是handle与线程池的封装 * 第一个泛型:参数类型泛型 * 第二个泛型:更新进度泛型 * 第三个泛型:onProgressUpdate的返 ...

  9. XACML-条件评估(Condition evaluation),规则评估(Rule evaluation),策略评估(Policy evaluation),策略集评估(PolicySet evaluation)

    本文由@呆代待殆原创,转载请注明出处. 一.条件评估(Condition evaluation) <Condition>元素缺失时或评估结果为真时,条件值为True. <Condit ...

  10. IOS 应用 退出的一个小方法

    AppDelegate * app=(AppDelegate *)[[UIApplication sharedApplication]delegate]; UIWindow *window = app ...