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

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

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

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

cocos2dx学习笔记之菜单Menu和菜单项MenuItem_第1张图片

cocos2dx学习笔记之菜单Menu和菜单项MenuItem_第2张图片

需要说明的是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)));
}


你可能感兴趣的:(cocos2dx)