Xna отладка - PullRequest
       28

Xna отладка

7 голосов
/ 04 февраля 2009

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

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

Ответы [ 5 ]

8 голосов
/ 04 февраля 2009

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

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

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

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

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

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

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

4 голосов
/ 04 февраля 2009

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

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

Edit:

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

http://www.codeplex.com/XnaConsole

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

3 голосов
/ 04 февраля 2009

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

2 голосов
/ 05 сентября 2010

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

0 голосов
/ 13 февраля 2012

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

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

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

Мир.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...