我如何在C#中同时播放两个声音

时间:2018-05-19 12:29:49

标签: c# visual-studio-2017

我在Visual Studio 2017上使用C#创建平台游戏。我如何同时播放两种声音?

我试过这个: Play two sounds simultaneusly ,但它不起作用。

以下是播放音乐的代码 -

private void Bg_music()
{
    new System.Threading.Thread(() =>
    {
        var bg = new System.Windows.Media.MediaPlayer();
        bg.Open(new System.Uri(path + "Foniqz_-_Spectrum_Subdiffusion_Mix_real.wav"));
        bg.Play();
    }).Start();                        
}

Sound_0,这应该一直播放 Sound_1,这只应在点击硬币时播放,Sound_0正在播放

1 个答案:

答案 0 :(得分:0)

我在您的代码中发现的第一个问题是您在Bg_music()中调用Timer1_Tick,这是错误的。每次,在计时器滴答时,会创建一个不正确的新线程。

除此之外,您使用了var bg,其范围仅限于Bg_music()的方法。您应该使用 MediaPlayer 而不是 var ,并且您的MediaPlayer bg应该位于表单的顶级(全局)。它会像 -

MediaPlayer bg;

public game_form()
{
    InitializeComponent();
    Bg_music(); //Calling the background music thread at the time user start playing the game.

    path = Directory.GetCurrentDirectory();
    path = path + "\\..\\..\\Resources\\";
    Aanet_checking();
    Translate();
    Character_checking();
}

你的Bg_music()看起来像这样 -

private void Bg_music()
{
    new System.Threading.Thread(() =>
    {
        bg = new System.Windows.Media.MediaPlayer();
        bg.Open(new System.Uri(path + "Foniqz_-_Spectrum_Subdiffusion_Mix_real.wav"));
        bg.Play();
    }).Start();                        
}

这一改变肯定会解决您的问题。

除了这个问题,我观察到的是很多图形闪烁。您应该启用双缓冲以消除这些闪烁问题。这将使您的游戏体验流畅而不会闪烁。

双缓冲的作用是首先在后台创建内存中的UI,然后一次显示图像。这样可以不中断地提供图形输出。只需将以下代码复制并粘贴到表单中即可 -

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED //Enable double buffering
        return cp;
    }
}

祝你好运!