实例介绍Cocos2d-x开关菜单
开关菜单是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);
下面我们通过一个实例介绍一下其它的复杂类型的开关菜单的使用,这个实例如下图所示,是一个游戏音效和背景音乐设置界面,我们可以通过开关菜单实现这个功能,我们的美术设计师为每一个设置项目(音效和背景音乐)分别准备了两个图片。
下面我们看看实例代码的实现,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对象。
实例介绍Cocos2d-x开关菜单的更多相关文章
- 实例介绍Cocos2d-x精灵菜单和图片菜单
精灵菜单类是MenuItemSprite,图片菜单类是MenuItemImage.由于MenuItemImage继承于MenuItemSprite,所以图片菜单也属于精灵菜单.为什么叫精灵菜单呢?那是 ...
- 【转】Android实例剖析笔记(二)--用实例讲解Andriod的开发过程,以NotesList为实例介绍Android的菜单机制
原文网址:http://kb.cnblogs.com/page/78304/ 简介 android提供了三种菜单类型,分别为options menu,context menu,sub menu. op ...
- Cocos2d-x开发实例介绍帧动画使用
下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画. 下面我们再看看具体的程序代码,首先看一下看H ...
- Cocos2d-x开发实例介绍特效演示
下面我们通过一个实例介绍几个特效的使用,这个实例下图所示,下图是一个操作菜单场景,选择菜单可以进入到下图动作场景,在下图动作场景中点击Go按钮可以执行我们选择的特性动作,点击Back按钮可以返回到菜单 ...
- Cocos2d-x中__Dictionary容器以及实例介绍
__Dictionary类在Cocos2d-x 2.x时代它就是CCDictionary类,它是模仿Objective-C中的NSDictionary类而设计的,通过引用计数管理内存.__Dictio ...
- Cocos2d-x中__Array容器以及实例介绍
__Array类在Cocos2d-x 2.x时代它就是CCArray类.它是模仿Objective-C中的NSArray类而设计的,通过引用计数管理内存.__Array继承于Ref类,因此它所能容纳的 ...
- 实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D
我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用.这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触 ...
- 实例介绍Cocos2d-x物理引擎:碰撞检测
碰撞检测是使用物理引擎的一个重要目的,使用物理引擎可以进行精确的碰撞检测,而且执行的效率也很高.在Cocos2d-x 3.x中使用事件派发机制管理碰撞事件,EventListenerPhysicsCo ...
- 实例介绍Cocos2d-x物理引擎:HelloPhysicsWorld
我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用物理引擎的开发过程,熟悉这些API的使用.这个实例的运行后的场景,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点生成一个新的 ...
随机推荐
- cdoj 04 Complete Building the Houses 暴力
Complete Building the Houses Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/# ...
- Celery学习笔记
转载请注明出处:点我 我的第一篇博客!嘿嘿! 在公司实习,接触到的第一个项目就用到了Celery,之前是完全没有接触过Celery这玩意,然后花了点时间仔细的研究了下怎么用.在学习过程中也遇到了些问题 ...
- 【JavsScript】当 JavaScript 从入门到提高前需要注意的细节:变量部分
在javaScript中变量使用var声明的变量是当前作用域的变量,不使用var声明的则肯定是全局变量. http://msdn.microsoft.com/zh-cn/library/dn64545 ...
- 【JavaScript】AJAX总结(异步JavaScript和XML)
AJAX介绍 通过 AJAX,你可以创建更好.更快以及更友好的 WEB 应用程序. AJAX 基于 JavaScript 和 JavaScript的XMLHttpRequest对象. AJAX 应用程 ...
- [Angular 2 Router] Configure Your First Angular 2 Route
Using the Angular 2 router requires defining routes, passing them in to the RouterModule.forRoot and ...
- 微软免费TFS如何设置在客户端独占签出
最近发现微软给我们提供了免费的TFS,地址:http://tfs.visualstudio.com/, 就注册了一个,但是我发现没办法独占签出. 在公司里,TFS有服务端,所以很好设置,但是注册微软的 ...
- javascript 变量解析
1.JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析).当你使用了一个变量,然后不久 ...
- HTML5本地存储 localStorage
HTML5的本地存储是大势所趋,如果仅存储在内存中,则是sessionStorage,他们的语法都是一样,仅仅是一个存储在本地文件系统中,另一个存储在内存中(随着浏览器的关闭而消失),其语句如下: l ...
- PHP.12-PHP-设计文件上传类
设计文件上传类 [PHP参数详解]{文件上传} ********************** *#构造方法编写 ********************** 此种传参方法规定必须用户必须按响应位置输入 ...
- [Adruino]XBEE 无线数据传输实际操作
双轮小车制作实例代码 引用:http://hi.baidu.com/dlfla84/item/52b89017a6209c5cf1090e9b 双轮小车制作 2009-6-12 初步完成了串口数据缓存 ...