gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:38:28 25 4
gpt4 key购买 nike

也许这里有人可以向我解释我做错了什么。这是在通过网络阅读了大量文章并按照文章所说的方法进行操作之后得出的结果,但它对我不起作用。

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

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

这是我的代码。很简单,就是爆炸声不行。

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

    UINT CMonstersThread(LPVOID Param);

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

    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);

这就是我的全部代码。从我从网上获得的信息来看,它应该可以工作,但不会像我预期的那样在发出爆炸声的同时持续播放音乐。

最佳答案

我建议使用最新 DirectX sdk 中的 XAudio2 来播放您的音频。我将花费更多的工作和代码,但最终结果会更好,因为您将能够单独加载声音文件而不是播放它。

使用“PlaySound”时,如果您尝试在事件发生后立即使用它,例如鼠标单击或怪物死亡/爆炸,您会注意到音频有延迟,而 XAudio2 不会遇到这种情况。我从经验中知道这一点。

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

http://code.msdn.com/concrtextras 也有 sample 您也可能会在这里找到有用的东西。

-瑞克

关于c++ - MFC 游戏项目中的爆炸声线程正在停止正在播放的音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3128635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com