cocos2d开发之菜单CCMenu

// 设置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》书中转载


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章