cocos2d-x 如何将按钮的状态更改为已单击

How to change the state of button to clicked in cocos2d-x

我是 cocos2d-x.I 的新手,我创建了一个按钮,我想在点击按钮时更改按钮的状态。我无法将状态从播放更改为暂停,类似于音乐 player.Below 是代码。

 void Gallery::buttonUI(Size visibleSize,Vec2 origin)
    {
        button = Button::create("play.png");
        //button->loadTextures("pause.png","play.png","pause.png");
        button->setPosition(Point((visibleSize.width/2)+origin.x,(visibleSize.height/2)+origin.y-80));
        button->setContentSize(Size(100.0f, button->getVirtualRendererSize().height));
        button->addTouchEventListener([&](Ref* sender, Widget::TouchEventType type){
            switch (type)
            {
                case Widget::TouchEventType::BEGAN:
                    break;

                case Widget::TouchEventType::ENDED:
                    CCLOG("Characters: %c %c", 'a', 65);
                    if (!flag)
                    Gallery::pauseSong();
                    else
                    Gallery::resumeSong();
                    break;
                default:
                break;
            }
        });
        this->addChild(button);
    }

void Gallery::playSong()
{
    CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("1.mp3");
    CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("1.mp3");
    flag = false;
}
void Gallery::pauseSong()
{
    CocosDenshion::SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
    flag = true;
}
void Gallery::resumeSong()
{
    CocosDenshion::SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
    flag = false;
}

我不知道ui::Button有这样的方法。但是我也没有在你的方法中看到特定的 ui::Button 项目(capinsets,不同触摸事件的不同方法等)的使用。
所以,我认为 MenuItemImage 更适合你的情况:

bool flag = true;
MenuItemImage *button = MenuItemImage::create("play.png", "play_pressed.png", CC_CALLBACK_0(Gallery::playSong, this));
button->setPosition(Vec2((visibleSize.width/2)+origin.x,(visibleSize.height/2)+origin.y-80)); // better is use Vec2, Point can be ambiguous

Menu* menu = Menu::create(button, NULL); // add created button on Menu
menu ->setPosition(0,0);
this->addChild(menu);

然后在处理程序中设置图片按下:

void Gallery::playSong()
{
    if(flag)
    {
        // preload better move to AppDelegate.cpp
        // CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("1.mp3");
        flag = false;
        CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("1.mp3");
        button->setNormalImage(Sprite::create(“pause.png”));
        button->setSelectedImage(Sprite::create(“pause_pressed.png”)); // if you use selected image
    }
    else
    {
        flag = true;
        CocosDenshion::SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
        button->setNormalImage(Sprite::create(“play.png”));
        button->setSelectedImage(Sprite::create(“play_pressed.png”));
    }
}
  • 在cocos3.x中使用属性:setHighlighted(bool)

示例:

  • 当按键时:button->setHighlighted(true);
  • 释放按键时: 按钮->setHighlighted(false);