Я пытаюсь понять, как управлять всем игровым циклом вручную в игре для Windows, без использования обычного класса Game Microsoft.Xna.Framework.Game.
Причина в том, что использование обычного класса Game вызывает некоторые заикания в моей игре. Немного, но из-за специфики игры все же хорошо видно.
Попробовав кучу различных настроек (vsync, fixedtimestep, разная частота кадров и т. Д.), Я решил попробовать написать свой собственный класс Game, чтобы иметь полный контроль над временем. Я не уверен, что это исправит, но, по крайней мере, таким образом у меня есть полный контроль.
В основном мне нужно:
Кто-нибудь знает, как это сделать? На самом деле это звучит довольно просто, но не удалось найти никакой документации о том, как это сделать.
Не уверен, что я делаю неправильно, но у меня есть следующий код (только для тестирования, время будет обрабатываться по-другому),и цикл будет работать некоторое время, затем остановится. Как только я наведу указатель мыши на окно, цикл снова начнется на некоторое время.
private void Application_Idle(object pSender, EventArgs pEventArgs)
{
Thread.Sleep(500);
//Message message;
//while (!PeekMessage(out message, IntPtr.Zero, 0, 0, 0))
{
gametime.update();
Update(gametime);
Draw(gametime);
GraphicsDevice.Present();
}
}
Если включить "while PeekMessage", цикл будет выполняться непрерывно, но игнорируя спящий режим, а также останавливаться, когда мышь перемещается по окну. . Не уверен, что здесь происходит ...
Я думаю, что оптимально я бы просто хотел сделать что-то простое, например, в основном цикле рендеринга:
while (alive)
{
Thread.Sleep(100);
gametime.update();
Update(gametime);
Draw(gametime);
GraphicsDevice.Present();
}
Но в этом случае окно остается пустым, поскольку кажется, что окно фактически не перерисовывается с новым содержанием. Я попробовал form.Refresh (), но все равно не пошел ... Есть идеи?