zoukankan      html  css  js  c++  java
  • [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

    https://github.com/li-zheng-hao
  • 相关阅读:
    项目外部 property文件使用方法
    java JsonArray统一添加key
    java发送Http请求
    excel数据追加,java实现
    request.getParameter("name")获取参数为null和""空字符串的区别
    maven 配置jetty插件启动 及简单测试
    左右值编码实现树状存储
    Spring将classpath下的 .properties文件数据读出放到map中,在初始化时加载
    Ubuntu简单配置
    java.io.Serializable浅析
  • 原文地址:https://www.cnblogs.com/lizhenghao126/p/11053719.html
Copyright © 2011-2022 走看看