如何更改要在cocos2d-x中单击的按钮的状态

时间:2015-11-27 13:46:10

标签: c++ ios xcode cocos2d-x

我对cocos2d-x很新。我创建了一个按钮,当我点击按钮时我想改变按钮的状态。我无法将状态从播放更改为暂停,类似于音乐播放器。下面是代码。

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

2 个答案:

答案 0 :(得分:1)

我不知道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”));
    }
}

答案 1 :(得分:-1)

  • 在cocos 3.x中使用property:setHighlighted(bool)

<强> 实施例

  • 按键时:button-&gt; setHighlighted(true);
  • 发布密钥时: 按钮 - &GT; setHighlighted(假);