我在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
正在播放
答案 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;
}
}
祝你好运!