Первая проблема, которую я обнаружил в вашем коде, это то, что вы звоните Bg_music()
в Timer1_Tick
, что неправильно.Каждый раз, во время отметки таймера создается новый поток, который не является правильным.
Кроме того, Вы использовали var bg
, область действия которого ограничена только этим методом Bg_music()
.Вы должны использовать MediaPlayer вместо var , и ваш MediaPlayer bg
должен быть на верхнем уровне формы (Global).Это будет что-то вроде -
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();
}
Это изменение определенно решит вашу проблему.
Помимоэта проблема, которую я наблюдал, это много графического мерцания.Вы должны включить Double Buffering , чтобы избавиться от этой мерцающей проблемы.Это сделает ваш игровой опыт гладким, без мерцания.
То, что делает двойная буферизация, - это создание пользовательского интерфейса в памяти сначала в фоновом режиме, а затем отображение изображения за один снимок.Это дает графический вывод без перерыва.Просто скопируйте и вставьте приведенный ниже код в форму -
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED //Enable double buffering
return cp;
}
}
Удачи!