Подсчет прошедшего времени / Разработка игр на Silverlight для начинающих

Если нам нужно подсчитать время между началом и концом игры, то можно определить две переменных класса DateTime в начале и конце игры, и потом просто вычесть одно из другого. Но если еще требуется выводить прошедшее время на экран, то уже нужен игровой цикл. Мне известны четыре способа реализовать его в Silverlight. DispatcherTimer, Storyboard, CompositionTarget и свой таймер написанный вручную. Более подробно об этих способах можно прочитать здесь http://silverlight.su/viewtopic.php?id=87

Я же выбрал вариант Storyboard, так как он работает в отдельном потоке и более стабилен в разных браузерах, что собственно не очень существенно для этой игры, но так уж сам для себя решил на будущее для главного игрового цикла использовать именно Storyboard. Для решения задачи в классе GameBoard : Page объявим переменные:


Storyboard storyboard = new Storyboard();
DateTime dtStart, dtNow;

В конструкторе класса GameBoard() определим переменные и зададим обработчик срабатывания тика игрового цикла (storyboard.Completed):


storyboard.Duration = TimeSpan.FromSeconds(1); // эту строку можно убрать
storyboard.Completed += new EventHandler(storyboard_Completed);
dtStart = DateTime.Now;
storyboard.Begin();

В обработчике вычисляем прошедшее время и выводим на в текстовый блок:


void storyboard_Completed(object sender, EventArgs e)
{
storyboard.Begin();
dtNow = DateTime.Now;
textBlockStoryboard.Text = (dtNow - dtStart).Minutes.ToString()+":"+(dtNow - dtStart).Seconds.ToString();
}

В repaint() останавливаем цикл storyboard.Stop():

if (gameBoard.bEndGame)
{
storyboard.Stop();
textBlockState.Text = "Game The End";
}

В результате получили вот такую игру:



Комментариев нет:

Отправить комментарий

Да, я внимательно слушаю