MFC游戏项目中的爆炸声音线程正在停止正在播放的音乐

时间:2010-06-27 19:41:12

标签: c++ visual-c++ mfc

Mabye有人在这里可以向我解释我做错了什么。这是在通过网络阅读了很多文章之后,做了文章所说的应该有用但但对我来说不起作用。

我正在开发一款带有背景音乐和爆炸声的漂亮小游戏。对于爆炸我知道我需要使用线程或我的音乐在第一次爆炸发生时停止。我正在使用线程,但音乐仍然停止。

我需要背景音乐一直播放,并且应该在爆炸声期间和之后继续播放。我尝试播放爆炸同步,它没有任何区别,背景声音停止播放第二个线程方法被触发。

这是我的代码。这很简单,但爆炸声不起作用。

  1. 这是* .h文件中的GLOBAL去除:

    UINT CMonstersThread(LPVOID Param);

  2. 这是* .cpp文件中的线程函数:

  3.     UINT CMonstersThread(LPVOID Param)
        {
            PlaySoundA("sounds\\expl06.wav", NULL, SND_ASYNC);
            AfxEndThread(0);
            return FALSE;
        }
    
    1. 这是每次点击“友好”时对线程的调用,(在相同的* .cpp文件中):

      AfxBeginThread(CMonstersThread,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);

    2. 这就是我的所有代码。从我通过网络获得的内容来看,它应该可以正常工作,但不会像我期望的那样在制作爆炸声时连续播放音乐。

4 个答案:

答案 0 :(得分:1)

我建议使用最新的DirectX sdk中的XAudio2来播放你的音频。我会多做一些工作&代码,但最终结果会更好,因为你可以单独加载声音文件播放它。

使用'PlaySound',如果您尝试在事件发生后立即使用它,您会注意到音频滞后,例如鼠标点击或怪物死亡/爆炸,您将不会使用XAudio2进行此操作。我从经验中知道这一点。

由于您已经在使用Visual Studio,我还建议您尽可能尝试使用VS 2010,因为[并发运行时,并行模式库和代理库]] 1使线程和任务占用的代码少一些。

http://code.msdn.com/concrtextras也有样本,你也可以在这里找到有用的东西。

-Rick

答案 1 :(得分:1)

我不认为可以使用任何Windows功能(如PlaySound或sndPlaySound)并行播放多个声音。如前所述,您可能希望查看DirectSound或类似的API。

答案 2 :(得分:0)

您可能希望使用功能更全面的库来播放音乐和声音,例如irrKang。我不确定winmm.dll会为您提供所需的信息。

答案 3 :(得分:0)

我在您发布的代码中看到的唯一问题是CMonstersThread未声明为__stdcall。

你说其他一些线程有问题,但是没有看到代码就很难猜出它的问题是什么。