Какие у меня есть варианты времени? - PullRequest
0 голосов
/ 27 февраля 2012

Я делаю элемент управления TextBox в XNA и не имею доступа к классу GameTime. В настоящее время я пытаюсь смоделировать курсор курсора мигающего текста и успешно сделал это, используя этот код:

int deltaTickCount = Environment.TickCount - previousTickCount;

if (deltaTickCount < CursorBlinkRate && Selected)
{
    spriteBatch.Draw(emptyPixel, new Rectangle(caretLocation, Rectangle.Y + 1, caretWidth, caretHeight), Color.Black);
}
else if (deltaTickCount > CursorBlinkRate * 2)
{
    previousTickCount = Environment.TickCount;
}

Однако я немного опасаюсь использования Environment.TickCount. Если компьютер работал достаточно долго, не произойдет ли сбой программы или не произойдет непредсказуемое поведение, когда число тиков превысит его интегральный размер?

Кто-нибудь знает, что делает Windows? Я предполагаю, что это будет использовать системные часы. Это было бы более подходящим решением? Я полагаю, они использовали что-то вроде общего количества миллисекунд до секунды вместо числа тиков, но я не уверен.

Спасибо за чтение.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Я обычно использую таймер диагностики системы во многих ситуациях.

Это довольно мощный инструмент, который создает для вас таймер с большим количеством хороших элементов управления.

using System.Diagnostics;

Stopwatch timer = new Stopwatch();

Тогдаиспользовать встроенные элементы управления:

timer.Start();
if(timer.elapsedMilliseconds() > ...)
{ }
timer.Reset();

и т.д ...

Это позволит вам сбросить таймер?

1 голос
/ 27 февраля 2012

Когда Evnironment.TickCount переворачивается, deltaTickCount становится отрицательным, поэтому вы знаете, что это произошло.Затем вычисление становится:

if (deltaTickCount < 0)
   deltaTickCount = int.MaxValue - previousTickCount + Environment.TickCount;
0 голосов
/ 27 февраля 2012

Не заботясь о том, что произойдет в случае целочисленного переполнения, просто измените на:

int deltaTickCount = 
    Environment.TickCount > previousTickCount 
      ? Environment.TickCount - previousTickCount 
      : CursorBlinkRate * 3; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...