菜单项的分类



MenuItem:菜单项类,它是一个虚基类,因此必须实现它的子类,再把子类对象赋给父类指针。

MenuItemFont:字体菜单项。

MenuItemAtlasFont:字体菜单项,和第一个的区别在于,它是用字体配置文件来设置字体。

MenuItemImage:图片菜单项。

MenuItemLabel:标签菜单项。

MenuItemSprite:精灵菜单项

MenuItemToggle:开关菜单项。

菜单项的实现

1.MenuItemFont(字体菜单项)

方法1:

MenuItemFont::create(选项文字,触发目标对象,触发目标函数);

方法2:

MenuItemFont::create(选项文字);

2.MenuItemImage(图片菜单项)

方法1:

MenuItemImage::create(默认显示的图片,点击时显示的图片,触发目标对象,触发目标函数);

3.MenuItemLabel(文本菜单项)

方法1:

MenuItemLabel::create(CCLableTTF对象,触发目标对象,触发目标函数);

4.MenuItemSprite(精灵菜单项)

方法1:

MenuItemSprite::create(默认显示的精灵对象,选中时显示的精灵对象,触发目标对象,触发目标函数);

5.MenuItemToggle(开关菜单项)

方法1:

MenuItemToggle::createWithTarget(触发目标对象,触发目标函数,MenuItem对象的可变参数列表);

下面是具体实现:

//获取尺寸
Size mysize=Director::sharedDirector()->getWinSize();
//文字菜单项
MenuItemFont * mymenu1=MenuItemFont::create("文字菜单1");
mymenu1->setPosition(ccp(mysize.width/2,mysize.height-40));
MenuItemFont * mymenu2=MenuItemFont::create("文字菜单2",this,menu_selector(Menu::menuCloseCallback));
mymenu2->setPosition(ccp(mysize.width/2,mysize.height-80));
//图片菜单项
MenuItemImage * mymenu3 = MenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(Menu::menuCloseCallback));
mymenu3->setPosition(ccp(mysize.width/2,mysize.height-120));
//文本菜单项
LabelTTF * ttf1=LabelTTF::create("文本菜单","Helvetica",24);
MenuItemLabel * mymenu4=MenuItemLabel::create(ttf1,this,menu_selector(Menu::menuCloseCallback));
mymenu4->setPosition(ccp(mysize.width/2,mysize.height-160));
//精灵菜单项
Sprite * mysprite1=Sprite::create("CloseSelected.png");
Sprite * mysprite2=Sprite::create("CloseNormal.png");
MenuItemSprite * mymenu5=MenuItemSprite::create(mysprite1,mysprite2,this,menu_selector(Menu::menuCloseCallback));
mymenu5->setPosition(ccp(mysize.width/2,mysize.height-200));
//开关菜单项
MenuItemFont * font1=MenuItemFont::create("开");
MenuItemFont * font2=MenuItemFont::create("关");
MenuItemToggle * mymenu6=MenuItemToggle::createWithTarget(this,menu_selector(Menu::menuCloseCallback),font1,font2,NULL);
mymenu6->setPosition(ccp(mysize.width/2,mysize.height-240)); //创建菜单
Menu* mymenu = Menu::create(mymenu1,mymenu2,mymenu3,mymenu4,mymenu5,mymenu6,NULL);
mymenu->setPosition(CCPointZero);
this->addChild(mymenu, 1);

菜单项的排列顺序

1.垂直排列:

menu->alignItemsVertically();

menu->alignItemsVerticallyWithPadding(50);

2.水平排列:

menu->alignItemsHorizontally();

带间隔的排列:menu->alignItemsHorizontallyWithPadding(30);//每两个菜单项之间间隔30

实例

auto closeItem = MenuItemImage::create(
"..\\Resources\\CloseNormal.png",
"..\\Resources\\CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width / 2,
origin.y + closeItem->getContentSize().height / 2)); // create menu, it's an autorelease object
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Vec2::ZERO);
addChild(menu, 1); // 创建一个MenuItemFont的MenuItem
MenuItemFont::setFontSize(25);
MenuItemFont::setFontName("Courier New");
auto pMenuItem1 = MenuItemFont::create("MoveDown", CC_CALLBACK_1(HelloWorld::menuJellyThinkCallback, this));
pMenuItem1->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2 + 100)); // 创建一个MenuItemAtlasFont的MenuItem
auto pMenuItem2 = MenuItemAtlasFont::create("378", "..\\Resources\\number.png", 256, 256, '0');
pMenuItem2->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2 + 70));
pMenuItem2->setScale(0.1); // 创建一个MenuItemToggle的MenuItem
auto pMenuItem3 = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuJellyThinkCallback, this), MenuItemFont::create("Toggle1"), MenuItemFont::create("Toggle2"), NULL);
pMenuItem3->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2 + 40)); // 创建菜单对象,是存放菜单项的容器
Menu* mn = Menu::create(pMenuItem1, pMenuItem2, pMenuItem3, NULL); // 注意:默认情况下,Menu是忽略锚点的
this->ignoreAnchorPointForPosition(false);
mn->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));
addChild(mn);

效果:

以上文字和代码从下面几个博客中学习之后总结回来的精髓:

http://blog.csdn.net/jianpengxuexikaifa/article/details/36641677

http://www.cnblogs.com/ttss/p/4082950.html

http://www.jellythink.com/archives/764

[cocos2d-x]关于菜单项的更多相关文章

  1. 在Winform界面菜单中实现动态增加【最近使用的文件】菜单项

    在我们一些和文件处理打交道的系统中,我们往往需要记录下最近使用的文件,这样方便用户快速打开之前浏览或者编辑过的文件,这种在很多软件上很常见,本文主要介绍在Winform界面菜单中实现[最近使用的文件] ...

  2. 微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项

    <!--禁用微信分享按钮--> <script> function onBridgeReady() { WeixinJSBridge.call('hideOptionMenu' ...

  3. JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)

    需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...

  4. java cef3 禁止右键菜单项

    如下图所示,在context_menu_handler.cpp中ContextMenuHandler::OnBeforeContextMenu添加以下代码即可: ){ model->Clear( ...

  5. 如何:对 SharePoint 列表项隐藏 ECB 中的菜单项

    可以通过使用功能框架向编辑控制块 (ECB) 菜单添加新的自定义操作.但是,您不能使用此方法进行相反的操作,即隐藏现有的 ECB 菜单项,因为它们是通过使用 ECMAScript(JavaScript ...

  6. Windows下给鼠标右键菜单添加获得完全控制权限的菜单项

    这段时间计算机C分区里多了很多无用的文件,而且不在同一个目录下,搜索出来删除的时候提示没有管理员权限,需要在右键属性里面修改,非常麻烦,于是查询了一下发现可以在文件右键菜单添加一个获取权限的菜单项,这 ...

  7. 孙鑫视频学习:VS2010中找不到【Tab order】菜单项

    在学习孙鑫视频中,修改Tab顺序时,找不到VC6.0中提到的[Layout]->[Tab order]菜单项,但VC2010中可以用Ctrl+D调出来Tab顺序,或者[格式]->[Tab键 ...

  8. 【crunch bang】 增加“菜单项”

    [右键菜单]->[Settings]->[Openbox]->[GUI Menu Editor] 挑选合适的位置,增加[菜单项],编辑内容.

  9. cocos2dx中的菜单项CCMenuItem及其五个子类的使用

    /*CCMenuItem是一个虚基类,因此必须实现它的五个子类之一,再把子类对象赋给父类指针,相当于多态*/ CCMenuItem *fontItem = CCMenuItemFont::create ...

  10. Qt自定义菜单项

    经常会看到一些菜单的部分项是由几个按钮组成的,如酷狗.QQ.360都有类似菜单,对于常规的菜单项,图标 + 文字 实现一个事件,很容易完成,那么怎么自定义菜单项呢? Qt提供了支持,就是利用QWidg ...

随机推荐

  1. React + Springboot + Quartz,从0实现Excel报表自动化

    一.项目背景 企业日常工作中需要制作大量的报表,比如商品的销量.销售额.库存详情.员工打卡信息.保险报销.办公用品采购.差旅报销.项目进度等等,都需要制作统计图表以更直观地查阅.但是报表的制作往往需要 ...

  2. logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息

    文章目录 1.xml文件的编写 2.实现的效果 2.1 日志保存到磁盘 2.2 控制台输出的效果 放置的位置 1.xml文件的编写 logback-spring.xml <?xml versio ...

  3. React实现一个简易版Swiper

    背景 最近在公司内部进行一个引导配置系统的开发中,需要实现一个多图轮播的功能.到这时很多同学会说了,"那你直接用swiper不就好了吗?".但其实是,因为所有引导的展示都是作为np ...

  4. JAVA学习前准备

    电脑常用快捷键 Ctrl+C:复制 Ctrl+V:粘贴 Ctrl+A:全选 Ctrl+X:剪切 Ctrl+Z:撤销 Ctrl+S:保存 Alt+F4:关闭窗口 Shift+delete:永久性删除文件 ...

  5. STF的DOCKER搭建

    OPENSTF OpenSTF(Smartphone Test Farm)是一个web端移动设备管理平台,可以从浏览器端远程调试.远程管理设备.其实有点类似于我们现在很火热的云测平台,如:testin ...

  6. ABAP 调用HTTP上传附件

    1.需求说明 在SAP中调用第三方文件服务器的HTTP请求,将文件保存在文件服务器上,并返回保存的文件地址.SAP保存返回的文件地址,通过浏览器进行访问. 2.需求实现 2.1.POSTMAN测试 通 ...

  7. C++实现真值表

    这一片文章主要是关于真值表,在完成之前我也遇到了许多问题.比如怎么去求解表达式的值,怎么去将每个变量进行赋值,也就是如何 将n个字符进行01全排列. 01全排列真的神奇,01全排列其实就是2^n.他可 ...

  8. i春秋include

    打开题目,发现它提示我们有个phpinfo.php,所以我们直接访问,没有什么特殊的发现,根据题目提示include,找到allow_url_include的信息 (ctrl+f直接进入网页搜索) 发 ...

  9. i春秋123

    打开是个普普通通的登录窗口,下尝试根据提示12341234进行输入,发现不正确...可能1234是指步骤,然后查看源码 发现了绿色的提示信息,我们就根据提示试试打开user.php 打开是白板网页,源 ...

  10. oracle 内置函数(二)字符函数

    主要函数: 大小写转换函数 获取子字符串函数(字符串截取) 获取字符串长度函数 字符串连接函数 去除子字符串函数 字符替换函数 字符串出现次数 字符串按照特定符号拆分多行 一.大小写转换 1.uppe ...