【问题标题】:Play Multiple Sounds at Once and Continue Where we Left off一次播放多个声音并从我们离开的地方继续
【发布时间】:2015-07-24 03:35:49
【问题描述】:

在我的程序中,目前我可以播放背景音乐。我的游戏是基于射击游戏的,如果我按下一个按钮,比如说向上箭头,它不会播放声音,并且在播放声音之后,它会继续我们在背景音乐中停止的地方?这是我的代码:

#include <iostream>
#include <Windows.h>
#include <conio.h>
#pragma comment (lib , "winmm.lib") // Used for sound

using namespace std;

// Define key
#define KEY_UP 72       

int main()
{
    int key = 0;

    while(true)
    {
        PlaySound(TEXT("Background Music.wav"), NULL, SND_FILENAME|SND_ASYNC);
        key = _getch();

        if (key == KEY_UP)
            PlaySound(TEXT("GunSound.wav"), NULL, SND_FILENAME|SND_ASYNC);
    }
    return 0;
}

【问题讨论】:

  • 使用 PlaySound() 函数似乎无法实现您想要的行为。如果您想要这种行为,您可能需要重写您的程序以使用更灵活的声音输出 API(例如 DirectX 或 waveOut,请参阅此问题:stackoverflow.com/questions/2010400/…

标签: c++ audio


【解决方案1】:

如果你想让你的背景音乐连续播放,你需要使用 SND_LOOP 参数。问题是,在这种模式下,API 会进入一种模式,在这种模式下音乐不会停止,直到您使用 NULL 波形文件名调用。我敢打赌,如果您将背景音乐声音放在单独的线程上,这将起作用。如果你这样做,那么你的 while 循环的其余部分应该可以工作。

如果您开始认真对待您的视频游戏,DirectSound 绝对是您的最佳选择。 CodeGuru 上有很多示例应用程序可以做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多