【Cocos2d-x】控制音量的滚动条
来源:互联网 发布:最常用的vscode插件 编辑:程序博客网 时间:2024/04/30 05:17
上一篇好不容易把滚动条加进来了,结果发现拿它控制音量也不是那么轻松的。
要面对的是两个问题:
1、如何控制音量
2、如何让音量值随滚动条的变化而变
对问题1 本来没想到会是个问题,结果还是出了问题,而且找了半天才找到问题。之前一直用SimpleAutioEngine,别的功能都好用,就是控制音量的函数,进到里面发现是空函数。(真不负责任)这也就解释了为啥 cpp_tests 里的CocosDenshion下面的滚动条控制不了音量。这时发现下面还有一个NewAutioEngine,既然是新的,应该还是趋势,就改用这个吧。这个AutioEngine不需要预加载,所有场景通用,不区分音乐和音效,主要就是这些区别。
怎么用呢,首先还是应该先"添加外部依赖项",这个照上一篇做就可以。然后在需要的类里引用 #include "audio/include/AudioEngine.h" 并在下面添加命名空间 using namespace experimental; 这样就可以使用 AutioEngine 类了。控制音量的就是 AutioEngine::setVolume() 方法
问题2本来也没以为有多复杂,结果通过它着实的巩固了一下C++. 大致原理是这样,我们从extension里引用过来的ControlSlider只是个滚动条,Cocos帮我们做的是我们把它添加到场景之后,可以进行拖拽。但我们想要在它值变动的时候改变不同声音的大小。其实就是要在 onTouchMoved 的时候做些其他事情,并且这个不在滚动条里做,要在外面做。
解决办法就是,做一个类继承 ControlSlider ,在这个新类里重写 onTouchMoved 函数,让它除了做基类的改变值之外再执行一个回调函数。这样当我们在使用这个类的时候,把要执行的回调函数赋给它就可以了。
干说还是太抽象,还是直接上代码:
#pragma once#include "Cocos2d.h"#include "extensions/GUI/CCControlExtension/CCControlSlider.h"using namespace cocos2d;class ControlAudioSlider :public extension::ControlSlider{public:ControlAudioSlider();~ControlAudioSlider();typedef std::function<void(ControlAudioSlider*, float, Event*)> audioSliderCallback;static ControlAudioSlider* create(const char* bgFile, const char* progressFile, const char* thumbFile);virtual bool onTouchBegion(Touch* touch, Event* pEvent);virtual void onTouchMoved(Touch* touch, Event* pEvent);void setValues(float minValue, float maxValue, float value);void setCallBack(const audioSliderCallback& callback);private:audioSliderCallback_callback;float _ratio;};
#include "ControlAudioSlider.h"#include "SimpleAudioEngine.h"using namespace CocosDenshion;ControlAudioSlider::ControlAudioSlider(){}ControlAudioSlider::~ControlAudioSlider(){}ControlAudioSlider* ControlAudioSlider::create(const char* bgFile, const char* progressFile, const char* thumbFile){Sprite *backgroundSprite = Sprite::create(bgFile);Sprite *progressSprite = Sprite::create(progressFile);Sprite *thumbSprite = Sprite::create(thumbFile);ControlAudioSlider* pRet = new (std::nothrow) ControlAudioSlider();pRet->initWithSprites(backgroundSprite, progressSprite, thumbSprite);return pRet;}bool ControlAudioSlider::onTouchBegion(Touch* touch, Event* pEvent){ bool b = extension::ControlSlider::onTouchBegan(touch, pEvent);return b;}void ControlAudioSlider::onTouchMoved(Touch* touch, Event* pEvent){extension::ControlSlider::onTouchMoved(touch, pEvent);_ratio = getValue() / getMaximumValue();if (_callback){_callback(this, _ratio, pEvent);}}void ControlAudioSlider::setCallBack(const audioSliderCallback& callback){_callback = callback;}void ControlAudioSlider::setValues(float minValue, float maxValue, float value){this->setMinimumValue(minValue);this->setMaximumValue(maxValue);this->setValue(value);}
ControlAudioSlider* slider = ControlAudioSlider::create("back/sliderTrack.png", "back/sliderProgress.png", "back/sliderThumb.png");slider->setPosition(Vec2(size.width / 2, size.height / 2));slider->setValues(0, 1.0f, 0.8f);slider->setCallBack([&](ControlAudioSlider* sender, float ratio, Event* pEvent){AudioEngine::setVolume(musicID, ratio);ConstClass::musicVolum = ratio;});this->addChild(slider, 5);
- 【Cocos2d-x】控制音量的滚动条
- cocos2d-x 滚动条
- cocos2d-x 3.x学习之滑动条控制背景音乐音量
- C# 控制音量 (滚动条形式)
- cocos2d-x下硬件音量按键控制游戏音量的实现
- 转载:cocos2d-x下硬件音量按键控制游戏音量的实现
- cocos2d-x 滚动条实现
- Cocos2d-x教程(31)-TableView的滚动条
- Cocos2D-X游戏开发入门学习--使用CCControlSlider实现对音量的控制--基础知识05
- cocos2d-x 控制android硬件音量大小调节按钮
- COCOS2D-X 音量
- 拖动条音量控制
- Lua中调用 cocos2d-x 的滑动条/滚动条 ScrollView
- 控制iFrame的滚动条
- JScrollPane滚动条的控制
- 简单的Jquery控制滚动条滚动
- JS控制滚动条滚动的位置
- 模拟滚动条控制内容的滚动
- poj1737 组合dp
- java 动态代理实现原理
- java.lang.StackOverflowError错误
- MySQL用户权限
- OSGEarth的测量分析
- 【Cocos2d-x】控制音量的滚动条
- mac下非常好用的命令行工具 iTerm2
- lower_bound
- UVa 10458 - Cricket Ranking (容斥)
- HDOJ 1001 Sum Problem
- 黑马程序员-oc中类的声明和实现
- mingw编译boost库之thread工程相关错误
- 弹出层插件layer
- qwt for android的安装,配置与运行