如果只做一个按钮

我想做一批按钮,想实现的效果是,默认显示图片A.png,点击一下,按钮放大一点,然后执行一个事件(比如,关闭背景音乐、重置游戏等),成功以后按钮的的背景图换成B.png
之前我用MenuItemSprite,实现了,大致代码如下:

    auto menu = Menu::create();
     
    auto spriteNormal = Sprite::create(s_pathSettingBtnOk);
    spriteNormal->setScale(0.5, 0.5);
    auto spriteSelected = Sprite::create(s_pathSettingBtnOk);
     
    auto settingBtnOkItem = MenuItemSprite::create(spriteNormal, spriteSelected, nullptr, CC_CALLBACK_1(SettingLayer::settingBtnOkCallback, this));
    settingBtnOkItem->setPosition(Point(this->winSize.width / 2, this->winSize.height / 2));
    menu->addChild(settingBtnOkItem);
     
    menu->setPosition(Point(0, 0));
    this->addChild(menu);


```


这样实现起来,有个问题是,按钮的第一个 Sprite 是被缩小0.5倍的,但它的可点击区域其实是原图的大小,我尝试设定 Sprite 的Rect,但按钮的位置又变了。

找了下资料,是不是能用ControlButton去做,尝试了一下,效果到挺好的,用ControlButton去实现,点击按钮的时候,它默认就变大一点点,但在我点击后,背景音乐被关闭了后,怎么去替换按钮的图片?

求各位给个帮助:5:

LZ碉堡了,点击把spriteSelected放大吧。

自己定义吧

setBackgroundSpriteForState(CCScale9Sprite对象,state)
去查这个方法吧

最典型的做法是做两个按钮A和B,叠在一块
一开始显示A隐藏B,点击A后再隐藏A,同时显示B;
点击B后,隐藏B,显示A

好多游戏都是这样做的

用CCControlStateSelected这个状态是么?如果程序运行正常,所谓“正常”就是,在我点击事件成功结束以后,那么按钮的背景图片修改了,那是没问题的,但如果我点击事件内部发生了错误,没能成功执行,其实按钮的背景图片应该是不需要改变的。

我理想的是,在点击事件内部去修改按钮的背景图

你不就是想做一个switch开关么,有CCControlSwitch啊,或者自己封一个这样的按钮出来,很简单的。