您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx学习笔记之菜单Menu和菜单项MenuItem

2018-01-28 00:49 363 查看
首先需要明确的是cocos2d-x 3.x版本不推荐使用菜单类Menu了,因为菜单的功能可以用Button,Sprite或者ImageView等经常使用的控件替代.

回想一下个人经历的实际项目,确实没有用过Menu,但是由于目前在学习的教材讲到了Menu,就顺便学习下并记录之.

首先上图介绍下Menu和MenuItem的继承关系和包含关系:





需要说明的是Menu和MenuItem(菜单和菜单项)是不可单独使用的,需要配合使用,具体方法是:

1.创建菜单项,并设置菜单项在菜单中的位置

2.创建菜单,将菜单项作为参数传入

3.图层中加入菜单,设置菜单位置

另外可以为每个菜单项MenuItem创建个1菜单Menu,这样可以省去设置菜单项MenuItem的坐标,只设置菜单Menu的坐标,但是会多创建几个菜单Menu的对象

以下是代码示例和效果图:

bool HelloWorld::init()
{
if (!Layer::init())
{
return false;
}
_rootNode = CSLoader::createNode("MainScene.csb");
addChild(_rootNode);
_flag = (Sprite*)_rootNode->getChildByName("Sprite_1");
//1.创建菜单项,并设置菜单项在菜单中的位置
//MenuItemFont:字体菜单项
MenuItemFont* menuItemFont = MenuItemFont::create("MenuItemFont", CC_CALLBACK_1(HelloWorld::menuItemCallBack,this));
//MenuItemImage:图片菜单项
MenuItemImage* menuItemImage = MenuItemImage::create("s6.png", "s6.png", CC_CALLBACK_1(HelloWorld::menuItemCallBack, this));
menuItemImage->setPosition(0, -50 );
//MenuItemLabel:标签菜单项
MenuItemLabel* menuItemLabel = MenuItemLabel::create(Label::create("MenuItemLabel", "Arial", 30), CC_CALLBACK_1(HelloWorld::menuItemCallBack, this));
menuItemLabel->setPosition(0, -100);
//MenuItemToggle:开关菜单项
MenuItemToggle* menuItemToggle = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuItemCallBack, this), MenuItemFont::create("On"), MenuItemFont::create("Off"), NULL);
menuItemToggle->setPosition(0, -150);
//2.创建菜单,将菜单项作为参数传入
Menu* pMenu = Menu::create(menuItemFont, menuItemImage, menuItemLabel, menuItemToggle,NULL);
//3.图层中加入菜单,设置菜单位置
pMenu->setPosition(480, 320);
addChild(pMenu);
return true;
}

void HelloWorld::menuItemCallBack(Ref* sender)
{
_flag->runAction(MoveBy::create(0.3, Vec2(50, 0)));
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: