// 设置CCMenuItemFont的默认属性
[CCMenuItemFont setFontName:@"Marker Felt"];
[CCMenuItemFont setFontSize:26];
// 生成几个文字标签并指定它们的选择器
CCMenuItemFont* item1 = [CCMenuItemFont itemFromString:@"Go Back!" target:self selector:@selector(menuItem1Touched:)];
CCSprite* normal = [CCSprite spriteWithFile:@"Icon.png"];
normal.color = ccRED;
CCSprite* selected = [CCSprite spriteWithFile:@"Icon.png"];
selected.color = ccGREEN;
CCMenuItemSprite* item2 = [CCMenuItemSprite itemFromNormalSprite:normal
selectedSprite:selected target:self selector:@selector(menuItem2Touched:)];
// 用其它两个菜单项生成一个切换菜单(图片也可以用于切换)
[CCMenuItemFont setFontName:@"STHeitiJ-Light"];
[CCMenuItemFont setFontSize:18];
CCMenuItemFont* toggleOn = [CCMenuItemFont itemFromString:@"I'm ON!"];
CCMenuItemFont* toggleOff = [CCMenuItemFont itemFromString:@"I'm OFF!"];
CCMenuItemToggle* item3 = [CCMenuItemToggle itemWithTarget:self selector:@selector(menuItem3Touched:) items:toggleOn, toggleOff, nil];
// 用菜单项生成菜单
CCMenuItemLabel *item4 = [CCMenuItemLabel itemWithLabel:label target:self selector:@selector(menuItem1Touched:)];
item4.disabledColor = ccc3(32,32,64);
item4.color = ccc3(200,200,255);
CCMenu* menu = [CCMenu menuWithItems:item1, item2, item3, item4,nil];
menu.position = CGPointMake(size.width / 2, size.height / 2);
[self addChild:menu];
// 排列对齐很重要,这样的话菜单项才不会叠加在同一个位置
[menu alignItemsVerticallyWithPadding:40];
第一个菜单项基于CCMenuItemFont,用于显示一条文字。当点击此菜单项,它会调用menuItem1Touched方法。在程序内部,CCMenuItemFont只是简单的生成一个CCLabel。如果你的场景中已经有一个CCLabel,你可以把它与CCMenuItemLabel类结合在一起使用。
同样的,有两个使用图片的菜单项;一个是CCMenuItemImage,它利用图片文件生成菜单项,内部实际上使用了CCSprite来实现。我在上述代码里使用了另一个类:CCMenuItemSprite。我认为这个类使用起来更加方便,因为它可以重复利用已有的精灵作为参数。你可以改变同一个图片的颜色,作为显示触摸后高亮效果的图片
CCMenuItemToggole只接受两个继承自CCMenuItem的对象作为参数,当用户点击菜单时,菜单将会在两个菜单项之间进行切换。你可以在CCMenuItemToggle里使用文字标签或者图片。
最后,CCMenu本身被生成和放置在场景中。因为所有菜单项都是CCMenu的子节点,它们放置的位置都是相对于CCMenu的。为了不让菜单互相叠加在一起,你必须调用一个CCMenu的排列对齐方法,比如alighItemsVerticallyWithPadding
注:从《Learn IPhone and iPad Cocos2d Game Delevopment》书中转载