• Cocos2d-x学习笔记(十一)之 菜单类CCMenu


      菜单类在游戏中有着非常重要的地位,CCMenu 是一个菜单项的容器,用来装载各种菜单项。菜单项可以是图片、系统字,或者自定义的字体。菜单的使用示例如下:

     1 //创建菜单项
     2 CCMenuItemImage* item1 = CCMenuItemImage::create(s_PlayNormal, s_
     3 PlaySelect, this, menu_selector(MenuLayer2::menuCallback));
     4 CCMenuItemImage* item2 = CCMenuItemImage::create(s_HighNormal, s_
     5 HighSelect, this, menu_selector(MenuLayer2::menuCallbackOpacity) );
     6 CCMenuItemImage* item3 = CCMenuItemImage::create(s_AboutNormal, s_
     7 AboutSelect, this, menu_selector(MenuLayer2::menuCallbackAlign) );
     8 item1->setScaleX( 1.5f );
     9 item2->setScaleX( 0.5f );
    10 item3->setScaleX( 0.5f );
    11 //创建菜单,并把菜单项加入到菜单容器中
    12 CCMenu* menu = CCMenu::create(item1, item2, item3, NULL);
    13 CCSize s = CCDirector::sharedDirector()->getWinSize();
    14 //设置菜单类的位置
    15 menu->setPosition(ccp(s.width/2, s.height/2));
    16 //添加到场景中
    17 addChild(menu, 0);

      菜单类还提供了alignItemsVertically 和align-ItemsHorizontally 等函数。一种是alignItems-Horizontally 水平对齐,另外alignItemsHorizontallyWithPadding 是留空间水平对齐。

    另一种是alignItemsVertically垂直对齐。

      下面我们就一起来看一下菜单项。菜单项CCMenuItem是一个基类,它的子类可以加入CCMenu中形成菜单。CCMenuItem类的继承关系如下:

      CCMenuItemLabel、CCMenuItemSprite、CCMenuItemToggle-->CCMenuItem。

      CCMenuItemAtlasFont、CCMenuItemFont-->CCMenuItemLabel。      CCMenuItemImage-->CCMenuItemSprite。

      1、标签菜单项

      使用字体定义的菜单项,包括CCMenuItemAtlasFont和CCMenuItemFont两种定义菜单项字体的方式。其中CCMenuItemFont是通过设定字体名称来设置字体的,这个字体是系统自带的。

      CCMenuItemFont使用如下:

    1 //设置字号
    2 CCMenuItemFont::setFontSize( 30 );
    3 //设置字体。 支持的字体包括Courier New、Marker Felt、American Typewriter和Arial等。
    4 CCMenuItemFont::setFontName( "Courier New" );
    5 //第一个参数是文字内容、第二个参数是执行回调函数的目标类、第三个参数是回调函数的名称传入选择器中,当按钮被按下的时候将调用这个回调函数。
    6 CCMenuItemFont  *item = CCMenuItemFont::create( "I Menu Item Font", this, menu_selector( 回调函数 ) );

      CCMenuItemAtlasFont则是通过字体配置PNG文件的CCLabelAtlas或者是FNT类型文件的CCLabelBMFont,即配置文件所对应的图片,使用示例如下:

    1 //创建CCLabelAtlas实例
    2 CCLabelAtlas* labelAtlas = CCLabelAtlas::create( "0123456789", "fonts/labelatlas.png", 16, 24, "." );
    3 //创建CCMenuItemLabel 参数分别表示:文字渲染类CCLabelAtlas、执行回调函数的目标类、回调函数的名称,当按钮被按下的时候将回调这个回调函数。
    4 CCMenuItemlabel* item = CCMenuItemLabel::create( labelAtlas, this, menu_selector(回调函数));
    5 
    6 //创建文字渲染类CCLabelBMFont
    7 CCLabelBMFont* label = CCLabelBMFont::create( "configuration", "fonts/bitmapFont.fnt" );
    8 
    9 CCMenuItemlabel* item1 = CCMenuItemLabel::create( label, this, menu_selector(回调函数));

      2、精灵菜单项

      精灵菜单项CCMenuItemSprite的特点是可以封装图片进入菜单项。使用示例如下:

    1 CCSprite* spriteNormal = CCSprite::create( s_MenuItem, CCRectMake(0, 23*2,115,23));
    2 CCSprite* spriteSelected = CCSprite::create( s_MenuItem, CCRectMake(0, 23*1,115,23));
    3 CCSprite* spriteDisabled = CCSprite::create( s_MenuItem, CCRectMake(0, 23*0,115,23));
    4 
    5 //参数分别为:普通状态下的按钮、选中状态下的按钮、无效状态下的按钮、执行回调函数的目标类、调用这个回调函数。
    6 CCMenuItemSprite* item = CCMenuItemSprite::create( spriteNormal, spriteSelected, spriteDisabled, this, menu_selector(回调函数) );

      CCMenuItemSprite的子类图片菜单项CCMenuItemImage,使用示例如下:

    1 CCMenuItemImage* item = CCMenuItemImage::create( "normal.png", "selected.png", "disabled.png", this, menu_selector(回调函数) );

      3、触发器菜单项

      触发器菜单项CCMenuItemToggle可以将任意的菜单项传进去,作为一个触发器按钮式的开关,使用示例如下:

    1 //创建触发器菜单项实例,参数如下:执行回调函数的目标类、回调函数的名称、后面可以传入菜单项,以NULL结束,这样在按下菜单项时,还会在这些菜单项中切换,适合做游戏音乐开关等。
    2 CCMenuItemToggle* item = CCMenuItemToggle::create( this, menu_selector(回调函数), CCMenuItemFont::create( "On" ) ,
    3 CCMenuItemFont::create( "Off" ), NULL );

      好了,菜单、菜单项以及其菜单项的子类就先介绍到这里了。

  • 相关阅读:
    lintcode:Binary Search 二分查找
    lintcode:1-10题
    leetcode 5 :Longest Palindromic Substring 找出最长回文子串
    leetcode 4 : Median of Two Sorted Arrays 找出两个数组的中位数
    Project Euler 78:Coin partitions
    Project Euler 77:Prime summations
    Project Euler 76:Counting summations
    筛选法求素数
    Codeforces D546:Soldier and Number Game
    Project Euler 75:Singular integer right triangles
  • 原文地址:https://www.cnblogs.com/atong/p/3274949.html
Copyright © 2020-2023  润新知