菜单项的分类



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

最新文章

  1. 2、实现不同子网之间的信息交流(互相可以PING通)
  2. 对最近的RTP和H264学习进行总结整理-04.20
  3. Ajax工作原理(转)
  4. Oracle的日期时间范围查询
  5. NBUT 1186 Get the Width(DFS求树的宽度,水题)
  6. redhat nginx随机启动脚本
  7. asp.net,根据gridview 中checkbox复选框选中的行对数据库进行操作
  8. Set集合架构和常用实现类的源码分析以及实例应用
  9. Abp中自定义Exception的HttpStatusCode
  10. keystore密钥文件使用的算法-PBKDF2WithHmacSHA1 和Scrypt
  11. left join 太神奇了
  12. FineUI 布局宽度自适应,后台回调js方法
  13. Ruby知识点三:运算符
  14. 第129天:node.js安装方法
  15. maven打包pom.xml备忘
  16. C# 操作自定义config文件
  17. BZOJ 4823: [Cqoi2017]老C的方块
  18. excle导出使用poi
  19. echart 初级尝试
  20. phpstudy2016+phpstorm2017-3+xdebug+chrome

热门文章

  1. 【vue2】Style和Class,条件,列表渲染,双向数据绑定,事件处理
  2. Three.js中加载外部fbx格式的模型素材
  3. Vue中常用的几种传值方式
  4. Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
  5. scrapy传递 item时的 数据不匹配 和一些注意事项
  6. Linux网络通信(线程池和线程池版本的服务器代码)
  7. perl中sprintf函数的用法
  8. Complementary XOR
  9. Go语言核心36讲22
  10. MongoDB - 索引知识