Если нам нужно подсчитать время между началом и концом игры, то можно определить две переменных класса DateTime в начале и конце игры, и потом просто вычесть одно из другого. Но если еще требуется выводить прошедшее время на экран, то уже нужен игровой цикл. Мне известны четыре способа реализовать его в Silverlight. DispatcherTimer, Storyboard, CompositionTarget и свой таймер написанный вручную. Более подробно об этих способах можно прочитать здесь http://silverlight.su/viewtopic.php?id=87
Я же выбрал вариант Storyboard, так как он работает в отдельном потоке и более стабилен в разных браузерах, что собственно не очень существенно для этой игры, но так уж сам для себя решил на будущее для главного игрового цикла использовать именно Storyboard. Для решения задачи в классе GameBoard : Page объявим переменные:
- Storyboard storyboard = new Storyboard();
- DateTime dtStart, dtNow;
- Storyboard storyboard = new Storyboard();
В конструкторе класса GameBoard() определим переменные и зададим обработчик срабатывания тика игрового цикла (storyboard.Completed):
- storyboard.Duration = TimeSpan.FromSeconds(1); // эту строку можно убрать
- storyboard.Completed += new EventHandler(storyboard_Completed);
- dtStart = DateTime.Now;
- storyboard.Begin();
- storyboard.Duration = TimeSpan.FromSeconds(1); // эту строку можно убрать
В обработчике вычисляем прошедшее время и выводим на в текстовый блок:
- void storyboard_Completed(object sender, EventArgs e)
- {
- storyboard.Begin();
- dtNow = DateTime.Now;
- textBlockStoryboard.Text = (dtNow - dtStart).Minutes.ToString()+":"+(dtNow - dtStart).Seconds.ToString();
- }
- void storyboard_Completed(object sender, EventArgs e)
В repaint() останавливаем цикл storyboard.Stop():
- if
(gameBoard.bEndGame)
- {
- storyboard.Stop();
- textBlockState.Text = "Game The End";
- }
- {
В результате получили вот такую игру:

Комментариев нет:
Отправить комментарий
Да, я внимательно слушаю