【amazing cocos2d-x 3.0之十一】制作各种按钮

制作按钮,比如游戏菜单选择界面等,是游戏开发中经常要用到的。此时你想到两种实现方式:

(1)创建一个精灵来代表按钮,然后检测这个按钮的状态

(2)利用系统自带的菜单系统

第二种方法会更为简单,所以此篇文章将来介绍第二种方法。


1. 创建一个简单的按钮


新建一个工程,名为“Buttons”。打开HelloWorldScene.h文件,添加一个成员变量:

LabelTTF* label; //文字标签

然后再打开HelloWorldScene.cpp,在init方法中添加如下代码:

//创建一个显示的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);

别忘了还要在init方法中添加我们按钮回调函数的具体实现哦:

void HelloWorld::starMenuCallback(Object* pSender)
{
   label->setString("Last button: * ");
}

编译并运行,效果如下:



2. 开关按钮


我们来介绍一下开关按钮——这种类型的按钮一次只有一个图片显示出来,当你点击它的时候,它就会切换到另外一种图片。因此你可以用它来制作一个控制面板的可见性的控制器,这样可以最大限度地利用设备上面有限的屏幕大小。

引擎自带的一种特殊的menu item叫做MenuItem Toggle能够帮我们做到这一点。

首先,在HelloWorldScene.h里面添加两个成员变量:

MenuItemImage* plusItem;
MenuItemImage* minusItem;

在上面的starMenu后面添加如下代码:

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);

跟之前有点不同的是,我们并没有在MenuItemImage中设置回调函数,而是把两张图片都添加到MenuItemToggle这个类里面,并在这里面设置回到函数。下面我们就来看看回调函数的具体实现:

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: -");
    }
}

MenuItemToggle里面的selectedItem()方法可以告诉我们它的哪一个子菜单项当前可见。

编译并运行,效果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值