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

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


  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ellis1970

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值