Windows 7 Ultimate 64Bit,我使用的是 CodeBlocks 16.01。我正在研究我的 OpenGL 大学项目,我正在尝试在玩家使用“空格键”键射击时添加枪声效果。
声音仅在我创建控制台项目或空项目并且声音播放正常时才有效,我知道我必须链接的库“winmm.lib”,它作为控制台项目工作得很好,这里是为此的代码。
#include <iostream>
#include <windows.h>
#include <mmsystem.h>
using namespace std;
int main()
{
PlaySound("shotgun.wav",NULL,SND_SYNC);
return 0;
}
当我现在在我的 Glut 项目中使用此代码时,问题就开始了,发生的事情不是播放“shotgun.wav”,而是播放一种称为“默认哔”的 Windows 系统声音,当按下拍摄按钮“空格键”时。游戏在声音完成之前冻结了几秒钟,但是我通过将上面的行替换为这个来解决了这个问题:
PlaySound(TEXT("shotgun.wav"), NULL, SND_FILENAME | SND_ASYNC);
它不再冻结,但仍然继续播放 Windows 系统声音,而不是 shotgun.wav。.wav 文件在项目中,我很确定它在正确的位置。这是我的 Glut 项目中的拍摄代码示例(我只复制了相关的代码):
void Keys(unsigned char key, int x, int y) {
key = tolower(key); //Just in case CAPS LOCK is ON.
if(key==27)
exit(0); //Escape key, Exit the game
switch(key){
case ' ': //SPACE BAR
/* some code here */
PlaySound(TEXT("shotgun.wav"), NULL, SND_FILENAME | SND_ASYNC);
break; //.....Code continues to the next case....
为了强制枪声效果,我不得不去 Windows 声音设置和“更改系统声音”,哈哈,是的,我实际上不得不用我的“Shotgun.wav”替换“默认哔声”,然后我回到游戏并编译,和哇!它正在工作。但当然这不是我想要的,因为显然这只适用于我的电脑,我们不希望这样。