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 );
好了,菜单、菜单项以及其菜单项的子类就先介绍到这里了。