从上面代码可以看到我创建了一个菜单里面有很多子项,这些子项都是场景切换。每一个新的场景都是一个练习。
见效果图:
关于创建菜单子项还有很多方法:
MenuItemLabel、MenuItemImage、MenuItemSprite等
下面拿MenuItemLabel举例(futura-48.fnt在我第一篇打飞机源码的素材里,源码在一楼,这种字体除了fnt还有一个png文件,是一起的,不能分开。这种字体创建的菜单就是下图中黄色的效果。)
autoitem2 =MenuItemLabel::create(Label::createWithBMFont("fonts/futura-48.fnt","Start"),CC_CALLBACK_1(MenuSceneTwo::MenuTest,this));
具体的效果图看下面:
这是我的第一个Hello,Menu场景
上面已经介绍了菜单的创建,尝试这去创建一个新场景吧,点击按钮可以切换不同的背景。
给菜单子项绑定数据
在这里还要学习菜单子项item的两个操作函数。setUserData和setUserObject。
setUserData看定义接收的是void*参数,可以接收任意类型的数据。我们可以用它来传递C++的基本类型数据,但是千万不要自己new一些变量来传值,会造成意外的。
setUserObject接收的是继承自Ref的子类。继承自Ref的子类,最常用的就是cocos2dx本身的String了。
auto item1 = MenuItemLabel::create(Label::createWithBMFont("fonts/futura-48.fnt"
"Easy"
),CC_CALLBACK_1(HomeWorkSnow::Start,宋体; background:none">item1->setUserObject(String::create(
auto item2 = MenuItemLabel::create(Label::createWithBMFont(
"Hard"
item2->setUserObject(String::create(
auto item3 = MenuItemLabel::create(Label::createWithBMFont(
"Difficult"
item3->setUserObject(String::create(
auto item4 = MenuItemLabel::create(Label::createWithBMFont(
"Hell"
item4->setUserObject(String::create(
auto menu = Menu::create(item1,NULL);
addChild(menu);
menu->alignItemsVertically();