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

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

菜单(Menu)包含以下内容

1.精灵菜单项(MenuItemSprite)

2.图片菜单项(MenuItemImage)

3.文字菜单项(MenuItemFont)

4.标签菜单项(MenuItemLabel)

4.开关菜单项(MenuItemToggle)


菜单的继承关系:


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

具体实现案例:

#include "HelloWorldScene.h"
USING_NS_CC;

Scene* HelloWorld::createScene()
{
    auto scene = Scene::create();
    
    auto layer = HelloWorld::create();

    scene->addChild(layer);

    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    
    //从导演单例中获取屏幕大小
    Size visibleSize = Director::getInstance()->getVisibleSize();
    
    //-----------------------------------------------------------------------
    //精灵菜单
    
    auto Spr =Sprite::create("Closenormal.png");  //创建精灵
    
    auto pStartItem =MenuItemSprite::create(Spr,Spr,CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
    
    pStartItem->setPosition(100,100);
    
    
    
    //-----------------------------------------------------------------------
    //图片菜单
   
    MenuItemImage* pCloseItem = MenuItemImage::create(
                                                      "Closenormal.png",//正常图片
                                                      "CloseSelected.png",//点击图片
                                                      CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));//点击菜单执行的函数
    pCloseItem->setPosition(200,100);
    
   
    
    //-----------------------------------------------------------------------
    //标签菜单
    
    auto label = Label::createWithSystemFont("I am Label Item.","Arial",30);   //标签
    
    //标签菜单
    MenuItemLabel* pLabelItem = MenuItemLabel::create(label,this));
    
    pLabelItem->setPosition(400,100);
    
    
    //-----------------------------------------------------------------------
    //文字菜单
    
    auto pFontItem =MenuItemFont::create("hello",this));
    
    pFontItem->setPosition(200,200);
    
    
    //开关菜单
    //MenuItemToggle
    MenuItemToggle * pToggleMenu =MenuItemToggle::createWithCallback(
                                                                    CC_CALLBACK_1(HelloWorld::menuCloseCallback,this),MenuItemFont::create("On"),MenuItemFont::create("Off"),NULL);
    pToggleMenu ->setPosition(200,300);
    

    
    //-----------------------------------------------------------------------
    //菜单 容纳一切菜单子项
    Menu* pMenu = Menu::create(pStartItem,pCloseItem,pLabelItem,pFontItem,pToggleMenu,NULL);
    
    pMenu->setPosition(Vec2::ZERO);//位置定在原点

    this->addChild(pMenu);
    
    return true;
}


void HelloWorld::menuCloseCallback(Ref* pSender)
{
    log("点击我了");

}

效果图:



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

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

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

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


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

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...