2009-02-04 12 views
7

Utilizo console.out.writeline() para imprimir las coordenadas que pertenecen a los diferentes sprites en un juego de XNA. Pero después de unos segundos, el juego comienza a ir realmente lento, y casi se detiene.
(Cuando no se escribe en la consola, no hay problemas con el rendimiento). (Las posiciones del sprite están escritas en cada método de actualización)Depuración de Xna

¿Hay alguna forma de escribir en la consola sin destruir el rendimiento del juego?

+0

¿Cuántos datos está tratando de escribir en la consola? –

+0

Las coordenadas y el tamaño de los dos sprites que la detección de colisión está comprobando. A lo sumo hay quizás 20 sprites activos. – eflles

+0

20x20 por cuadro? –

Respuesta

8

¿Es capaz de escribir en un archivo de registro en lugar de la consola? Que bien puede ser más rápido debido al almacenamiento temporal y la falta de movimiento en sentido vertical, mostrando etc.

¿Usted realmente tiene una consola mientras este se está ejecutando? Si es así, intente minimizarlo cuando no esté interesado. Supongo que es el desplazamiento lo que está causando el problema.

EDIT: Bueno, parece cierta evidencia está en orden.

algunas pruebas ... no tengo instalado XNA, pero diferentes formas de escribir a las consolas siguen siendo interesantes. Escribí el número 0-99999 a varias consolas:

  • como una aplicación de Windows Forms, bajo el depurador, a la consola de Visual Studio: 135000ms, si la consola era visible o encubierto.
  • como una aplicación de Windows Forms, bajo el depurador, escribir en un archivo: 160ms
  • como una aplicación de consola, no bajo el depurador, la consola minimizada: 4149ms
  • como una aplicación de consola, no bajo el depurador, no consola minimizada: 14514ms

Así como se puede ver, la consola de Visual Studio es muy lento, una consola sin minimizar en "normal" está al lado más lento, una consola minimizada es razonablemente ágil, y escribir en un archivo es muy rápida .

yo estoy junto a mi consejo para tratar de escribir en un archivo en lugar de la consola, y por otra parte si se trata de una consola independiente, tratan de minimizarlo durante la mayor parte del tiempo.

+1

Downvoters: los comentarios hacen que los downvotes sean realmente * útiles *. –

+1

Creo que el hecho de que estés adivinando hace que tu respuesta sea básicamente inútil. –

+0

@Dave: Por el contrario, he dado sugerencias para áreas de exploración y opciones que bien pueden esperar. Usted escribió "Es probable", que también indica incertidumbre. ¿Eso hace que tu respuesta sea inútil? –

4

"¿Hay una manera de escribir en la consola sin destruir el rendimiento en el juego?"

Bueno, podría crear su propia consola en el juego como la mayoría de los motores de juegos (más notablemente Quake), y mostrar la consola cuando se presiona una tecla.

Editar:

si no quiere poner en práctica su propia consola, hay un proyecto haciendo esto:

http://www.codeplex.com/XnaConsole

que tiene ventajas sobre la consola Win32, ya que se ejecuta en juego, a la velocidad de fotogramas del juego, y no le hará perder su dispositivo al cambiar entre la consola y su aplicación xna. (Aunque la recuperación dispositivo es automático en XNA, soltando el dispositivo todavía sucede bajo las sábanas)

+0

¿Qué quiere decir que puede implementar una consola más rápido que el equipo de XNA? –

+0

La consola no está implementada por el equipo XNA, la consola que está utilizando (si no me equivoco) es la consola Win32. –

+0

¡Cambié mi voto ya que ha cambiado su respuesta! –

3

Es probable que esté escribiendo demasiados datos en la consola. Reduzca la frecuencia de las escrituras de la consola usando un contador o un temporizador. Una actualización por segundo suele ser suficiente para ver lo que necesita.

2

Sé que esta es una publicación anterior, pero para aquellos con preguntas similares hay una forma mejor. Hay otra biblioteca de tipo consola que puede incluir que es realmente fácil de usar (mucho más fácil que el proyecto de la consola xna). Se llama XNA Debug Terminal y se puede encontrar en http://www.protohacks.net/xna_debug_terminal
Esto pone una terminal como ventana de comando en la parte superior de su juego y le permite ver/establecer el valor de cualquier variable, invocar cualquier método o incluso ver cambios de valores en tiempo real. Es completamente de código abierto y funciona con XNA 3.0 y XNA 3.1. Esto puede permitirle ver fácilmente las coordenadas de su sprite (o cualquier otra cosa) en cualquier momento durante la ejecución de su juego.

0

Simplemente, puede hacer lo siguiente:

Crear una clase llamada, por ejemplo, Trace, y en el método de dibujo se traza la información que necesita en la pantalla utilizando SpriteBatch.DrawString(...) esto es mejor que consola supongo ..

espero que esto ayude,

Paz.