zoukankan      html  css  js  c++  java
  • Cocos2d-x学习笔记(七)菜单

    菜单类继承关系如下:

    图1 菜单类继承关系

    文本菜单只能显示文本,包括:MenuItemLabel、MenuItemFont和MenuItemAtlasFont:

    #include "HelloWorldScene.h"
    
    USING_NS_CC;
    
    Scene* HelloWorld::createScene()
    {
        auto scene = Scene::create();
        auto layer = HelloWorld::create();
        scene->addChild(layer);
        return scene;
    }
    
    bool HelloWorld::init()
    {
        if ( !Layer::init() )
        {
            return false;
        }
        
        Size visibleSize = Director::getInstance()->getVisibleSize();
        Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
        Sprite *bg = Sprite::create("bg.jpg");
        bg->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height/2));
        this->addChild(bg);
    
        MenuItemFont::setFontName("Times New Roman");
        MenuItemFont::setFontSize(80);
        MenuItemFont *item1 = MenuItemFont::create("Start", CC_CALLBACK_1(HelloWorld::menuItem1Callback, this));
      MenuItemAtlasFont *item2 = MenuItemAtlasFont::create("Help", "fonts/tuffy_bold_italic-charmap.png",48, 65 ,' ', CC_CALLBACK_1(HelloWorld::menuItem2Callback, this));
        Menu *mn = Menu::create(item1, item2, NULL);
        mn->alignItemsVertically();
        this->addChild(mn);
    
        return true;
    }
    
    void HelloWorld::menuItem1Callback(cocos2d::Ref *pSender)
    {
        MenuItem *item = (MenuItem*)pSender;
        log("Touch Start Menu Item %p", item);
    }
    
    void HelloWorld::menuItem2Callback(cocos2d::Ref *pSender)
    {
        MenuItem *item = (MenuItem*)pSender;
        log("Touch Help Menu Item %p", item);
    }

    运行结果:

    图2 文本菜单示例

    精灵菜单和图片菜单,MenuItemImage继承于MenuItemSprite。

       Sprite *startSpriteNormal = Sprite::create("menu/start-up.png");
        Sprite *startSpriteSelected = Sprite::create("menu/start-down.png");
    
        MenuItemSprite *startMenuItem = MenuItemSprite::create(startSpriteNormal, startSpriteSelected, CC_CALLBACK_1(HelloWorld::menuItemStartCallback, this));
        startMenuItem->setPosition(Director::getInstance()->convertToGL(Vec2(700, 170)));
    
        MenuItemImage *settingMenuItem = MenuItemImage::create("menu/setting-up.png", "menu/setting-down.png", CC_CALLBACK_1(HelloWorld::menuItemSettingCallback, this));
        settingMenuItem->setPosition(Director::getInstance()->convertToGL(Vec2(480, 400)));
    
        MenuItemImage *helpMenuItem = MenuItemImage::create("menu/help-up.png", "menu/help-down.png", CC_CALLBACK_1(HelloWorld::menuItemHelpCallback, this));
        helpMenuItem->setPosition(Director::getInstance()->convertToGL(Vec2(860, 480)));
    
        Menu *mu = Menu::create(startMenuItem, settingMenuItem, helpMenuItem, NULL);
        mu->setPosition(Vec2::ZERO);
        this->addChild(mu);

    运行结果:

    图3 精灵菜单和图片菜单示例

     开关菜单,它可以进行两种状态切换的菜单项:

    auto soundOnMenuItem = MenuItemImage::create("menu2/on.png", "menu2/on.png");
        auto soundOffMenuItem = MenuItemImage::create("menu2/off.png", "menu2/off.png");
    
        auto soundToggleMenuItem = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuSoundToggleCallback, this), soundOnMenuItem, soundOffMenuItem, NULL);
        soundToggleMenuItem->setPosition(Director::getInstance()->convertToGL(Vec2(818, 220)));
    
        auto musicOnMenuItem = MenuItemImage::create("menu2/on.png", "menu2/on.png");
        auto musicOffMenuItem = MenuItemImage::create("menu2/off.png", "menu2/off.png");
    
        auto musicToggleMenuItem = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuMusicToggleCallback, this), musicOnMenuItem, musicOffMenuItem, NULL);
        musicToggleMenuItem->setPosition(Director::getInstance()->convertToGL(Vec2(818, 362)));
    
        auto okMenuItem = MenuItemImage::create("menu2/ok-down.png", "menu2/ok-up.png");
        okMenuItem->setPosition(Director::getInstance()->convertToGL(Vec2(600, 510)));
    
        Menu *mn = Menu::create(soundToggleMenuItem, musicToggleMenuItem, okMenuItem, NULL);
        mn->setPosition(Vec2::ZERO);
        this->addChild(mn);

    运行结果:

    图4 开关菜单

  • 相关阅读:
    Understand Rails Authenticity Token
    正则表达式:数值及数值型字符串三位一组格式化
    ceph主要数据结构解析2-Rados.h文件
    遍历聚合对象中的元素——迭代器模式(三)
    ceph主要数据结构解析3-Ceph_fs.h文件
    linux crontab 定时命令
    mysql数据类型详解
    遍历聚合对象中的元素——迭代器模式(四)
    Eclipse自动插件依赖的一种配置解决方式
    php缓存小技巧
  • 原文地址:https://www.cnblogs.com/AmitX-moten/p/4200150.html
Copyright © 2011-2022 走看看