• 【Cocos2d入门教程四】Cocos2d-x菜单篇


    游戏世界多姿多彩,无论多靓丽的游戏,多耐玩的游戏,在与游戏用户交互上的往往是菜单。 上一章我们已经大概了解了导演、节点、层、精灵。这一章以菜单为主题。

    菜单(Menu)包含以下内容:

    1.精灵菜单项(MenuItemSprite)

    2.图片菜单项(MenuItemImage)

    3.文字菜单项(MenuItemFont)

    4.标签菜单项(MenuItemLabel)

    4.开关菜单项(MenuItemToggle)


    菜单的继承关系:


    这里图片菜单项也是同样继承于精灵菜单下。图片菜单项也可称为精灵菜单 。文字菜单项继承于标签菜单项下。总的来说菜单被分为三大类。

    具体实现案例:

     1 #include "HelloWorldScene.h"
     2 USING_NS_CC;
     3 
     4 Scene* HelloWorld::createScene()
     5 {
     6     auto scene = Scene::create();
     7     
     8     auto layer = HelloWorld::create();
     9 
    10     scene->addChild(layer);
    11 
    12     return scene;
    13 }
    14 
    15 // on "init" you need to initialize your instance
    16 bool HelloWorld::init()
    17 {
    18     //////////////////////////////
    19     // 1. super init first
    20     if ( !Layer::init() )
    21     {
    22         return false;
    23     }
    24     
    25     //从导演单例中获取屏幕大小
    26     Size visibleSize = Director::getInstance()->getVisibleSize();
    27     
    28     //-----------------------------------------------------------------------
    29     //精灵菜单
    30     
    31     auto Spr =Sprite::create("CloseNormal.png");  //创建精灵
    32     
    33     auto pStartItem =MenuItemSprite::create(Spr,Spr,CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    34     
    35     pStartItem->setPosition(100,100);
    36     
    37     
    38     
    39     //-----------------------------------------------------------------------
    40     //图片菜单
    41    
    42     MenuItemImage* pCloseItem = MenuItemImage::create(
    43                                                       "CloseNormal.png",    //正常图片
    44                                                       "CloseSelected.png",//点击图片
    45                                                       CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));//点击菜单执行的函数
    46     pCloseItem->setPosition(200,100);
    47     
    48    
    49     
    50     //-----------------------------------------------------------------------
    51     //标签菜单
    52     
    53     auto label = Label::createWithSystemFont("I am Label Item.", "Arial", 30);   //标签
    54     
    55     //标签菜单
    56     MenuItemLabel* pLabelItem = MenuItemLabel::create(label,CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    57     
    58     pLabelItem->setPosition(400,100);
    59     
    60     
    61     //-----------------------------------------------------------------------
    62     //文字菜单
    63     
    64     auto pFontItem =MenuItemFont::create("hello",CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    65     
    66     pFontItem->setPosition(200,200);
    67     
    68     
    69     //开关菜单
    70     //MenuItemToggle
    71     MenuItemToggle * pToggleMenu =MenuItemToggle::createWithCallback(
    72                                                                     CC_CALLBACK_1(HelloWorld::menuCloseCallback,this),
    73                                                                     MenuItemFont::create("On"),
    74                                                                     MenuItemFont::create("Off"),
    75                                                                     NULL);
    76     pToggleMenu ->setPosition(200,300);
    77     
    78 
    79     
    80     //-----------------------------------------------------------------------
    81     //菜单 容纳一切菜单子项
    82     Menu* pMenu = Menu::create(pStartItem,pCloseItem, pLabelItem,pFontItem,pToggleMenu, NULL);
    83     
    84     pMenu->setPosition(Vec2::ZERO);//位置定在原点
    85 
    86     this->addChild(pMenu);
    87     
    88     return true;
    89 }
    90 
    91 
    92 void HelloWorld::menuCloseCallback(Ref* pSender)
    93 {
    94     log("点击我了");
    95 
    96 }

    效果图:


    菜单(Menu)类常用方法简介

    菜单类提供了不同几种方法来排列菜单项,使用它们你可以垂直排列你的菜单项,也可以水平排列,一下简单介绍这些方法的参数和用法:

    1.使用void alignItemsVertically();和 void alignItemsVerticallyWithPadding(float padding);可以使菜单项在垂直方向排列。其中padding参数为每个菜单项在垂直方向上的间距,如果没有该参数,则以默认间距排列。

    2.使用void alignItemsHorizontally();和void alignItemsHorizontallyWithPadding(float padding);可以使菜单项在水平方向排列。其中padding参数为每个菜单项在水平方向上的间距,如果没有该参数,则以默认间距排列。


    Ok.关于Cocos2d菜单的分享就到此结束。下一章以Cocos2d的动作为主要内容进行浅析

     
  • 相关阅读:
    一步步构建大型网站架构
    程序员技术练级攻略
    再谈“我是怎么招聘程序员的”
    os.path.basename()
    用pymysql实现的注册登录公告练习
    缓冲(cache)和缓存(buffer)
    数据库视图,触发器,事务,存储过程,函数,备份与恢复
    mysql用户管理和pymysql
    mysql重点,表查询操作和多表查询
    数据库的约束语句和表之间的关系
  • 原文地址:https://www.cnblogs.com/advances/p/4719049.html
Copyright © 2020-2023  润新知