[cocos2d-x]关于菜单项
菜单项的分类
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]关于菜单项的更多相关文章
- 在Winform界面菜单中实现动态增加【最近使用的文件】菜单项
在我们一些和文件处理打交道的系统中,我们往往需要记录下最近使用的文件,这样方便用户快速打开之前浏览或者编辑过的文件,这种在很多软件上很常见,本文主要介绍在Winform界面菜单中实现[最近使用的文件] ...
- 微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项
<!--禁用微信分享按钮--> <script> function onBridgeReady() { WeixinJSBridge.call('hideOptionMenu' ...
- JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)
需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...
- java cef3 禁止右键菜单项
如下图所示,在context_menu_handler.cpp中ContextMenuHandler::OnBeforeContextMenu添加以下代码即可: ){ model->Clear( ...
- 如何:对 SharePoint 列表项隐藏 ECB 中的菜单项
可以通过使用功能框架向编辑控制块 (ECB) 菜单添加新的自定义操作.但是,您不能使用此方法进行相反的操作,即隐藏现有的 ECB 菜单项,因为它们是通过使用 ECMAScript(JavaScript ...
- Windows下给鼠标右键菜单添加获得完全控制权限的菜单项
这段时间计算机C分区里多了很多无用的文件,而且不在同一个目录下,搜索出来删除的时候提示没有管理员权限,需要在右键属性里面修改,非常麻烦,于是查询了一下发现可以在文件右键菜单添加一个获取权限的菜单项,这 ...
- 孙鑫视频学习:VS2010中找不到【Tab order】菜单项
在学习孙鑫视频中,修改Tab顺序时,找不到VC6.0中提到的[Layout]->[Tab order]菜单项,但VC2010中可以用Ctrl+D调出来Tab顺序,或者[格式]->[Tab键 ...
- 【crunch bang】 增加“菜单项”
[右键菜单]->[Settings]->[Openbox]->[GUI Menu Editor] 挑选合适的位置,增加[菜单项],编辑内容.
- cocos2dx中的菜单项CCMenuItem及其五个子类的使用
/*CCMenuItem是一个虚基类,因此必须实现它的五个子类之一,再把子类对象赋给父类指针,相当于多态*/ CCMenuItem *fontItem = CCMenuItemFont::create ...
- Qt自定义菜单项
经常会看到一些菜单的部分项是由几个按钮组成的,如酷狗.QQ.360都有类似菜单,对于常规的菜单项,图标 + 文字 实现一个事件,很容易完成,那么怎么自定义菜单项呢? Qt提供了支持,就是利用QWidg ...
随机推荐
- Selenium+Python系列 - 开发环境搭建
一.写在前面 我从未想过自己会写python系列的自动化文章,有些同学会问,那你现在为什么又开始写了? 不止一个人找过我,问我可以写一些Python自动化的文章吗,答案是肯定的. 笔者Java党,整P ...
- 基于tauri+vue3.x多开窗口|Tauri创建多窗体实践
最近一种在捣鼓 Tauri 集成 Vue3 技术开发桌面端应用实践,tauri 实现创建多窗口,窗口之间通讯功能. 开始正文之前,先来了解下 tauri 结合 vue3.js 快速创建项目. taur ...
- 实现etcd服务注册与发现
转载自:实现etcd服务注册与发现 0.1.目录结构 . ├── api │ └── main.go ├── common │ └── common.go ├── docker-compose ...
- 16.-admin管理后台
一.admin管理后台 Django提供给了比较完善的后台管理数据库接口,可供开发过程中调用和测试使用 Django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发者使用 命令:py ...
- 完全背包问题 —— 贪心优化 DP 范围
题意: 现在有 \(2n+1\) 个物品(\(n\le 300\)),体积分别为 \(-n,-n+1,\dots,-1,0,1,\dots,n\),第 \(i\) 个物品有 \(a_i\) 个,求选出 ...
- 「浙江理工大学ACM入队200题系列」问题 H: 零基础学C/C++18——三位数反转
本题是浙江理工大学ACM入队200题第二套中的H题 我们先来看一下这题的题面. 由于是比较靠前的题目,这里插一句.各位新ACMer朋友们,请一定要养成仔细耐心看题的习惯,尤其是要利用好输入和输出样例. ...
- 题解合集 (update on 11.5)
收录已发布的题解 按发布时间排序. 部分可能与我的其他文章有重复捏 qwq . AtCoder for Chinese: Link ZHOJ: Link 洛谷 \(1\sim 5\) : [题解]CF ...
- Postman使用指导
1. 下载好Postman,不用注册账号,直接离线使用 2. 软件的配置修改: 2.1关闭SSL认证 2.2关闭系统代理 2.3上传证书填写hosthost为服务器地址和端口:crt和key可以通过国 ...
- 13.django-admin组件
Django内置了一个强大的组件叫Admin,提供给网站管理员快速开发运营后台的管理站点,下面通过案例进行操作 1.创建模型类 模型类如下: from django.db import models ...
- ftp多用户多目录配置
测试环境:centos7 1. 装包与卸载 yum -y install vsftpd yum -y autoremove vsftpd&&rm -rf /etc/vsftpd /et ...