cocos2d-X 3.10关于声音开关以及音量大小问题

用滑动块来控制音量以及声音开关:

加入头文件以及命名空间

.h文件

#include"GUI\CCControlExtension\CCControl.h"
#include"GUI\CCControlExtension\CCControlSwitch.h"
using namespace cocos2d::extension;

定义音量大小值:

float soundValue;

定义声音开关控制函数

void soundSwitch(Ref* psender, Control::EventType controlevent);

cpp文件

#include "ui/CocosGUI.h" 

#include"GUI/CCControlExtension/CCInvocation.h"//当我按照其他人的方法就会出现cccontrol_selector报错,然后我发现cccontrol_selector定义是在Invocation文件中

using namespace ui;
using namespace CocosDenshion;

auto yinliang = Slider::create();
yinliang->loadBarTexture("yinliangn.png");//音量进度条背景
yinliang->loadSlidBallTextures("yinliangb.png", "yinliangb.png", "");//滑动块
yinliang->loadProgressBarTexture("yinliangy.png");//
yinliang->setPercent(soundValue * 100);
yinliang->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));
yinliang->addEventListener([=](Ref* pSender, Slider::EventType type) {
if (type == Slider::EventType::ON_PERCENTAGE_CHANGED) {
soundValue = yinliang->getPercent()*0.01;
log("NOW=%.2f", soundValue);
// 设置背景音乐值
SimpleAudioEngine::getInstance()->setBackgroundMusicVolume(soundValue);
// 设置音效值
SimpleAudioEngine::getInstance()->setEffectsVolume(soundValue);
UserDefault::getInstance()->setFloatForKey("soundNum", soundValue);
UserDefault::getInstance()->flush();
}
});
this->addChild(yinliang);
//声音开关
auto soundControl = ControlSwitch::create
(
Sprite::create("switch-mask.png"),
Sprite::create("switch-on.png"),
Sprite::create("switch-off.png"),
Sprite::create("switch-thumb.png"),
Label::createWithSystemFont("On", "Arial-BoldMT", 16),
Label::createWithSystemFont("Off", "Arial-BoldMT", 16)
);
soundControl->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::soundSwitch), Control::EventType::VALUE_CHANGED);
soundControl->setPosition(Vec2(visibleSize.width/2,visibleSize.height*0.3));
this->addChild(soundControl);


}
void HelloWorld::soundSwitch(Ref* psender, Control::EventType controlevent) {
auto fSwitch = (ControlSwitch*)psender;
if (fSwitch->isOn()) {
SimpleAudioEngine::getInstance()->resumeAllEffects();
SimpleAudioEngine::getInstance()->rewindBackgroundMusic();
}
else {
SimpleAudioEngine::getInstance()->stopAllEffects();
SimpleAudioEngine::getInstance()->stopBackgroundMusic();
}
}

猜你喜欢

转载自blog.csdn.net/diao1057/article/details/76447266