Xna отладка

Я использую console.out.writeline() для печати координат, принадлежащих различным спрайтам в игре XNA. Но через несколько секунд игра начинает идти очень медленно и практически останавливается.
(При отсутствии записи в консоль проблем с производительностью нет). (Позиции спрайта записываются в каждом методе обновления)

Есть ли способ записи на консоль без ущерба для производительности игры?

5 ответов

Решение

Вы можете писать в лог-файл вместо консоли? Это может быть быстрее из-за буферизации и отсутствия прокрутки, отображения и т. Д.

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

РЕДАКТИРОВАТЬ: Хорошо, кажется, некоторые доказательства в порядке.

Несколько тестов... У меня не установлено XNA, но разные способы записи на консоли все еще интересны. Я написал цифры 0-99999 на различных консолях:

  • Как приложение WinForms в отладчике для консоли Visual Studio: 135000 мс, независимо от того, была ли консоль видимой или скрытой.
  • Как приложение WinForms, под отладчиком, запись в файл: 160ms
  • Как консольное приложение, не под отладчиком, консоль свернута: 4149мс
  • Как консольное приложение, не под отладчиком, консоль не свернута: 14514мс

Итак, как вы можете видеть, консоль Visual Studio мучительно медленна, следующая - самая медленная, не минимизированная "нормальная" консоль, минимизированная консоль - достаточно гибкая, и запись в файл очень быстрая.

Я следую своему совету попробовать записать файл в консоль, а не в консоли, а в противном случае, если это отдельная консоль, в большинстве случаев стараться свести ее к минимуму.

"Есть ли способ записи на консоль без ущерба для производительности игры?"

Что ж, вы могли бы создать свою собственную игровую консоль, как это делают большинство игровых движков (особенно Quake), и отображать консоль при нажатии клавиши.

Редактировать:

если вы не хотите реализовывать собственную консоль, есть проект, который делает это:

http://www.codeplex.com/XnaConsole

которая имеет преимущества перед консолью Win32, потому что она работает в игре, с частотой кадров игры и не заставит вас потерять устройство при переключении между консолью и приложением xna. (Хотя восстановление устройства происходит автоматически в XNA, потеря устройства все еще происходит под прикрытием)

Вполне вероятно, что вы записываете слишком много данных в консоль. Уменьшите частоту записи консоли с помощью счетчика или таймера. Обычно достаточно одного обновления в секунду, чтобы увидеть, что вам нужно.

Я знаю, что это старый пост, но для тех, у кого похожие вопросы, есть лучший способ. Есть еще одна библиотека консольного типа, которую вы можете включить, которая действительно проста в использовании (намного проще, чем консольный проект xna). Он называется XNA Debug Terminal и его можно найти по адресу http://www.protohacks.net/xna_debug_terminal
Это помещает терминал, похожий на командное окно, поверх вашей игры и позволяет вам просматривать / устанавливать значение любой переменной, вызывать любой метод или даже наблюдать за изменением значений в режиме реального времени. Это полностью открытый исходный код и работает с XNA 3.0 и XNA 3.1. Это может легко позволить вам видеть ваши спрайтовые координаты (или что-нибудь еще) в любое время во время выполнения вашей игры.

Просто вы можете сделать следующее:

Создайте класс с именем например Traceи в методе рисования вы рисуете нужную информацию на экране, используя SpriteBatch.DrawString(...) это лучше чем консоль я думаю..

Надеюсь, это поможет,

Мир.

Другие вопросы по тегам