实例介绍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对象。

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》
本书交流讨论网站http://www.cocoagame.net

更多精彩视频课程请关注智捷课堂Cocos课程http://v.51work6.com

欢迎加入Cocos2d-x技术讨论群257760386

《Cocos2d-x实战 C++卷》现已上线各大商店均已开售

京东http://item.jd.com/11584534.html

亚马逊http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当http://product.dangdang.com/23606265.html

互动出版网http://product.china-pub.com/3770734

《Cocos2d-x实战 C++卷》源码及样章下载地址

源码下载地址http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台

 

时间: 2024-08-29 13:03:25

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

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

精灵菜单类是MenuItemSprite图片菜单类是MenuItemImage.由于MenuItemImage继承于MenuItemSprite所以图片菜单也属于精灵菜单.为什么叫精灵菜单呢那是因为这些菜单项具有精灵的特点我们可以让精灵动起来具体使用时候是把一个精灵放置到菜单中作为菜单项. 精灵菜单类MenuItemSprite它的其中一个创建函数create定义如下 static MenuItemSprite* create ( Node * normalSprite, //菜单项正常显示时候

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

下面我们通过一个实例介绍一下帧动画的使用这个实例如下图所示点击Go按钮开始播放动画这时候播放按钮标题变为Stop点击Stop按钮可以停止播放动画. 下面我们再看看具体的程序代码首先看一下看HelloWorldScene.h文件它的代码如下 #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::Layer {

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

下面我们通过一个实例介绍几个特效的使用这个实例下图所示下图是一个操作菜单场景选择菜单可以进入到下图动作场景在下图动作场景中点击Go按钮可以执行我们选择的特性动作点击Back按钮可以返回到菜单场景. 下面我们再看看具体的程序代码首先看一下看HelloWorldScene.h文件它的代码如下 #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" #include "My

photoshop碎片滤镜的使用实例介绍

  photoshop作为图片处理工具的佼佼者,今天小编教大家photoshop碎片滤镜的使用,教程比较基础,希望能对大家有所帮助! 方法/步骤 如图所示,我们点击箭头所指的photoshop软件图标,打开photoshop软件. 如图所示,我们点击箭头所指的"文件"这一项. 如图所示,在弹出的列表菜单中,我们点击箭头所指的"打开(O)..."这一项. 如图所示,我们选择一张图片,接下来我们点击箭头所指的"打开"按钮. 如图所示,点击"

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

我们通过一个实例介绍一下在Cocos2d-x 3.x中使用物理引擎的开发过程熟悉这些API的使用.这个实例的运行后的场景当场景启动后玩家可以触摸点击屏幕每次触摸时候就会在触摸点生成一个新的精灵精灵的运行是自由落体运动. HelloPhysicsWorld实例 使用物理引擎的一般步骤如下图所示. 这个过程与上帝创建世界的过程类似上帝首先创建了世界然后为世界指定了边界否则万物就会掉到世界之外的混沌里去了最后上帝创建了万物.当然这只是一个最基本的步骤有的时候还需要碰撞检测和使用关节等处理.下面我们就按

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

碰撞检测是使用物理引擎的一个重要目的使用物理引擎可以进行精确的碰撞检测而且执行的效率也很高.在Cocos2d-x 3.x中使用事件派发机制管理碰撞事件EventListenerPhysicsContact是碰撞事件监听器.碰撞检测相关的API我们在前面一节介绍过了下面通过一个实例介绍碰撞检测的实现.这个实例的运行后的场景如图所示当场景启动后玩家可以触摸点击屏幕每次触摸时候就会在触摸点生成一个新的精灵精灵的运行是自由落体运动.当这些精灵之间发生接触时候它们的颜色被设置为黄色分离后颜色又恢复到原来状

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

我们通过一个实例介绍一下在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程熟悉这些API的使用.这个实例运行后的场景如图所示当场景启动后玩家可以触摸点击屏幕每次触摸时候就会在触摸点生成一个新的精灵精灵的运行自由落体运动.   HelloBox2D实例使用Box2D引擎进行开发过程如图12-15所示.下面我们就按照这个步骤介绍一下代码部分.首先看一下看HelloWorldScene.h文件它的代码如下 #ifndef __HELLOWORLD_SCENE_H__ #define __H

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

__Dictionary类在Cocos2d-x 2.x时代它就是CCDictionary类它是模仿Objective-C中的NSDictionary类而设计的通过引用计数管理内存.__Dictionary继承于Ref类因此它所能容纳的是Ref及子类所创建的对象指针.   1.创建__Dictionary对象 创建__Dictionary对象有很多函数下面是总结常用的函数 static __Dictionary* create().创建__ Dictionary.  static __Dictio

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

__Array类在Cocos2d-x 2.x时代它就是CCArray类.它是模仿Objective-C中的NSArray类而设计的通过引用计数管理内存.__Array继承于Ref类因此它所能容纳的是Ref及子类所创建的对象指针. 1.创建__Array对象创建__Array对象有很多函数下面是总结常用的函数static __Array* create().创建__Array.static __Array* create(Ref* object, -).使用一系列Ref创建__Array.stat