制作按钮,比如游戏菜单选择界面等,是游戏开发中经常要用到的。此时你想到两种实现方式:
(1)创建一个精灵来代表按钮,然后检测这个按钮的状态
(2)利用系统自带的菜单系统
第二种方法会更为简单,所以此篇文章将来介绍第二种方法。
新建一个工程,名为“Buttons”。打开HelloWorldScene.h文件,添加一个成员变量:
LabelTTF* label; //文字标签
//创建一个显示的label label=LabelTTF::create("Last button: None","Marker Felt",32); label->setPosition(Point(origin.x + visibleSize.width/2, origin.y + visibleSize.height - 80)); label->setHorizontalAlignment(TextHAlignment::CENTER); //设置label水平居中 this->addChild(label); //创建一个button auto starMeneItem=MenuItemImage::create("ButtonStar.png","ButtonStarSel.png",CC_CALLBACK_1(HelloWorld::starMenuCallback,this)); starMenuItem->setPosition(Point(150,200)); auto starMenu=Menu::create(starMenuItem,NULL); starMenu->setPosition(Point::ZERO); //menu锚点默认为(0,0),此时把menu位置也设为(0,0),所以menu的左下角位于屏幕的左下角 this->addChild(starMenu,1);
void HelloWorld::starMenuCallback(Object* pSender) { label->setString("Last button: * "); }
我们来介绍一下开关按钮——这种类型的按钮一次只有一个图片显示出来,当你点击它的时候,它就会切换到另外一种图片。因此你可以用它来制作一个控制面板的可见性的控制器,这样可以最大限度地利用设备上面有限的屏幕大小。
引擎自带的一种特殊的menu item叫做MenuItem Toggle能够帮我们做到这一点。
首先,在HelloWorldScene.h里面添加两个成员变量:
MenuItemImage* plusItem; MenuItemImage* minusItem;
plusItem=MenuItemImage::create("ButtonPlus.png","ButtonPlusSel.png"); minusItem=MenuItemImage::create("ButtonMinus.png","ButtonMniusSel.png"); MenuItemToggle* toggleItem=MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::plusMinusButtonCallback,this),plusItem,minusItem,NULL); auto toggleMenu=Menu::create(toggleItem,NULL); toggleMenu->setPosition(Point(150,300)); this->addChild(toggleMenu,1);
void HelloWorld::plusMinusButtonCallback(Object* pSender) { MenuItemToggle* toggleItem=(CCMenuItemToggle*)pSender; if(toggleItem->selectedItem()==plusItem) { label->setString("Visible button: +"); } else if(toggleItem->selectedItem()==minusItem) { label->setString("Visible button: -"); } }
编译并运行,效果如下: