用滑动块来控制音量以及声音开关:
加入头文件以及命名空间
.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();
}
}