游戏世界多姿多彩,无论多靓丽的游戏,多耐玩的游戏,在与游戏用户交互上的往往是菜单。 上一章我们已经大概了解了导演、节点、层、精灵。这一章以菜单为主题。
菜单(Menu)包含以下内容:
1.精灵菜单项(MenuItemSprite)
2.图片菜单项(MenuItemImage)
3.文字菜单项(MenuItemFont)
4.标签菜单项(MenuItemLabel)
4.开关菜单项(MenuItemToggle)
菜单的继承关系:
这里图片菜单项也是同样继承于精灵菜单下。图片菜单项也可称为精灵菜单 。文字菜单项继承于标签菜单项下。总的来说菜单被分为三大类。
具体实现案例:
1 #include "HelloWorldScene.h" 2 USING_NS_CC; 3 4 Scene* HelloWorld::createScene() 5 { 6 auto scene = Scene::create(); 7 8 auto layer = HelloWorld::create(); 9 10 scene->addChild(layer); 11 12 return scene; 13 } 14 15 // on "init" you need to initialize your instance 16 bool HelloWorld::init() 17 { 18 ////////////////////////////// 19 // 1. super init first 20 if ( !Layer::init() ) 21 { 22 return false; 23 } 24 25 //从导演单例中获取屏幕大小 26 Size visibleSize = Director::getInstance()->getVisibleSize(); 27 28 //----------------------------------------------------------------------- 29 //精灵菜单 30 31 auto Spr =Sprite::create("CloseNormal.png"); //创建精灵 32 33 auto pStartItem =MenuItemSprite::create(Spr,Spr,CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); 34 35 pStartItem->setPosition(100,100); 36 37 38 39 //----------------------------------------------------------------------- 40 //图片菜单 41 42 MenuItemImage* pCloseItem = MenuItemImage::create( 43 "CloseNormal.png", //正常图片 44 "CloseSelected.png",//点击图片 45 CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));//点击菜单执行的函数 46 pCloseItem->setPosition(200,100); 47 48 49 50 //----------------------------------------------------------------------- 51 //标签菜单 52 53 auto label = Label::createWithSystemFont("I am Label Item.", "Arial", 30); //标签 54 55 //标签菜单 56 MenuItemLabel* pLabelItem = MenuItemLabel::create(label,CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); 57 58 pLabelItem->setPosition(400,100); 59 60 61 //----------------------------------------------------------------------- 62 //文字菜单 63 64 auto pFontItem =MenuItemFont::create("hello",CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); 65 66 pFontItem->setPosition(200,200); 67 68 69 //开关菜单 70 //MenuItemToggle 71 MenuItemToggle * pToggleMenu =MenuItemToggle::createWithCallback( 72 CC_CALLBACK_1(HelloWorld::menuCloseCallback,this), 73 MenuItemFont::create("On"), 74 MenuItemFont::create("Off"), 75 NULL); 76 pToggleMenu ->setPosition(200,300); 77 78 79 80 //----------------------------------------------------------------------- 81 //菜单 容纳一切菜单子项 82 Menu* pMenu = Menu::create(pStartItem,pCloseItem, pLabelItem,pFontItem,pToggleMenu, NULL); 83 84 pMenu->setPosition(Vec2::ZERO);//位置定在原点 85 86 this->addChild(pMenu); 87 88 return true; 89 } 90 91 92 void HelloWorld::menuCloseCallback(Ref* pSender) 93 { 94 log("点击我了"); 95 96 }
效果图:
菜单(Menu)类常用方法简介
菜单类提供了不同几种方法来排列菜单项,使用它们你可以垂直排列你的菜单项,也可以水平排列,一下简单介绍这些方法的参数和用法:
1.使用void alignItemsVertically();和 void alignItemsVerticallyWithPadding(float padding);可以使菜单项在垂直方向排列。其中padding参数为每个菜单项在垂直方向上的间距,如果没有该参数,则以默认间距排列。
2.使用void alignItemsHorizontally();和void alignItemsHorizontallyWithPadding(float padding);可以使菜单项在水平方向排列。其中padding参数为每个菜单项在水平方向上的间距,如果没有该参数,则以默认间距排列。
Ok.关于Cocos2d菜单的分享就到此结束。下一章以Cocos2d的动作为主要内容进行浅析