cocos2d-x 2.2.2 在win7系统下 setbackgroundmusicvolume 无效的问题。
来源:互联网 发布:阿里云是用来干嘛的 编辑:程序博客网 时间:2024/05/23 13:00
初学cocos2d-x,按照教程写音量调整按钮,发现最后无论如何按钮都无法生效。找来找去发现是setBackGroundMusicVolume函数下竟然没有实现。结合一些文章,貌似是在win7下可能会出类似问题,而Mac OS似乎没啥问题……好歧视啊。后来在论坛上找到了响应的解决方案(原帖地址http://www.cocos2d-x.org/forums/6/topics/11651),之后在里面的一个链接中,找到解决办法如下:
更改cocos2d-x目录下CocosDenshion/win32/Mciplayer.cpp,更改如下内容:
11#include "MciPlayer.h"2
+#include <Digitalv.h>23
34
#define WIN_CLASS_NAME "CocosDenshionCallbackWnd"45
#define BREAK_IF(cond) if (cond) break;
@@ -94,6 +95,26 @@ void MciPlayer::Open(const char* pFileName, UINT uId)9495
} while (0);9596
}9697
98
+void MciPlayer::Volume(UINT volume)99
+{100
+ if (!m_hDev)101
+ return;102
+ MCI_DGV_SETAUDIO_PARMS mciParams = {0};103
+ mciParams.dwItem = MCI_DGV_SETAUDIO_VOLUME;104
+ mciParams.dwValue = volume;105
+ mciSendCommand(m_hDev, MCI_SETAUDIO, MCI_DGV_SETAUDIO_ITEM | MCI_DGV_SETAUDIO_VALUE, (DWORD)&mciParams);106
+}107
+108
+UINT MciPlayer::Volume() const109
+{110
+ if (!m_hDev)111
+ return 0;112
+ MCI_STATUS_PARMS mciParams = {0};113
+ mciParams.dwItem = MCI_DGV_STATUS_VOLUME;114
+ mciSendCommand(m_hDev, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)&mciParams);115
+ return mciParams.dwReturn;116
+}117
+97118
void MciPlayer::Play(UINT uTimes /* = 1 */)98119
{99120
if (! m_hDev)
然后修改CocosDenshion/win32/Mciplayer.h:
5454*/5555
UINT GetSoundID();5656
57
+ // @volume value ranges from 0 .. 100058
+ void Volume(UINT volume);59
+60
+ // @return value ranges from 0 .. 100061
+ UINT MciPlayer::Volume() const;62
+5763
private:5864
friend LRESULT WINAPI _SoundPlayProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);5965
最后修改CocosDenshion/win32/SimpleAudioEngine.cpp:
7474{7575
return;7676
}77
-77
+7878
sharedMusic().Open(_FullPath(pszFilePath).c_str(), _Hash(pszFilePath));7979
sharedMusic().Play((bLoop) ? -1 : 1);8080
}
@@ -235,20 +235,26 @@ void SimpleAudioEngine::unloadEffect(const char* pszFilePath)235235
236236
float SimpleAudioEngine::getBackgroundMusicVolume()237237
{238
- return 1.0;
238+ return sharedMusic().Volume() / 1000.0f;
239239}240240
241241
void SimpleAudioEngine::setBackgroundMusicVolume(float volume)242242
{243
+ sharedMusic().Volume((UINT) (volume * 1000.0));243244
}244245
245246
float SimpleAudioEngine::getEffectsVolume()246247
{247
- return 1.0;
248+ return sharedList().at(0)->Volume() / 1000.0f; // XXX returning the first
248249}249250
250251
void SimpleAudioEngine::setEffectsVolume(float volume)251252
{253
+ EffectList::iterator iter;254
+ for (iter = sharedList().begin(); iter != sharedList().end(); iter++)255
+ {256
+ iter->second->Volume((UINT) (volume * 1000.0));257
+ }252258
}253259
之后函数就可以调整音量了。
0 0
- cocos2d-x 2.2.2 在win7系统下 setbackgroundmusicvolume 无效的问题。
- Cocos2d-x在Windows下音量设置无效的问题
- Cocos2d-x在win7下的android交叉编译环境
- cocos2d-x在win7下的android交叉编译环境
- 解决cocos2dx-3.15下setBackgroundMusicVolume()不起作用的问题
- Cocos2d-x win7 + vs2008出现的问题
- win7下如何新建cocos2d-x-3.0与cocos2d-x-2.2.3的项目
- win7下cmdt命令无效的问题
- Cocos2d-x 在Windows7环境下的安装 问题整理
- cocos2d-x在NDK r9下的编译问题
- 64位win7系统下cocos2d-x3.x的环境配置(自学笔记)
- cocos2d-x 在win7下vs2010环境搭建
- [cocos2dx]Cocos2d-x在win7下android环境搭建
- Cocos2d-x-3.0在win7下的Android环境搭建与运行测试项目
- Cocos2d-x 3.10中 win7下音效引擎的修改问题?
- 在win7下搭建cocos2d-x v3.2rc0开发环境(For Android)
- 在win7下搭建cocos2d-x v3.2rc0开发环境(For Android)
- cocos2dx-3.x 增加win版下setBackgroundMusicVolume功能
- 2013级C++第3周(春)项目——第一次见对象
- javascript call方法
- Python 读取txt文件中的数据并绘制出图形
- HDU-3339 In Action 最短路+01背包
- 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序
- cocos2d-x 2.2.2 在win7系统下 setbackgroundmusicvolume 无效的问题。
- JavaFX 皮肤功能
- 块和它的多重定义:
- [c/c++]class/struct数据在内存中的布局
- hadoop wordcount
- JavaFX游戏开发--第一课 精灵动画
- 代码块准确
- NGINX+TOMCAT+MEMCACHED 架构分布式集群
- 关于使用<s:property value="">形式取得 数据库图片地址的注意事项