Tutorial: Dibujando texto en 2D
En este tutorial, vamos a ver los conceptos básicos para dibujar texto en un juego hecho con XNA.
El dibujar texto en 2D en una aplicación con XNA es muy sencillo. Puede ser que los resultados de dibujar simple texto no sean tan asombrosos como sería hacerlos con imágenes, de cualquier forma, el mostrar texto en pantalla puede ser de gran utilidad para otras cosas además de mostrar elementos del juego como Scores o el número de vidas restantes.
Primero creamos un nuevo proyecto en XNA, si no recuerdas como, dale click aquí.
Una vez que tengamos nuestro proyecto nuevo, vamos al Solution Explorer y en el nodo de Content, damos click derecho > Add > New Item.
En las opciones que nos aparecen, seleccionamos Sprite Font y le ponemos un nombre, en mi caso le puse MiFont.spritefont. Damos Add.
![]()
Lo que nos generó Visual Studio es un nuevo archivo XML, el cual tiene la función de definir cómo se debe de ver nuestro texto al momento de dibujarlo. Si quieres saber más sobre XML, visita la entrada en Wikipedia
Entre las etiquetas que encontramos ahí, hay dos que son muy fáciles de entender: y . La primera regula el tamaño de la fuente y la segunda el estilo de la misma (Bold, Italic, etc.). Vamos a dejar estos valores aunque si quieres modificarlos eres libre de hacerlo, sólo recuerda cerrar siempre las etiquetas.
Ahora vamos a nuestro archivo Game1.cs y justo después de la declaración del SpriteBatch y agregamos :
SpriteFont spriteFont;
En este objeto vamos a cargar nuestra fuente y también vamos a poder dibujar el texto.
Ahora vamos a nuesto método LoadContent y escribimos:
spriteFont = Content.Load("MiFont");
Ahora nuestra variable SpriteFont ya está cargada con la descripción de la fuente que creamos. El “MiFont” que le mandamos al método Load() es el nombre sin extensión de la fuente que creamos.
spriteBatch.Begin();
spriteBatch.DrawString(spriteFont, "Hola XNA Mexico!!!!",
new Vector2(400, 300), Color.Red);
spriteBatch.End();
Como recordamos en de tutoriales pasados, siempre que dibujemos con SpriteBatch, debemos hacer la llamada Begin() antes de usarlo y End() una vez que terminamos de dibujar, para dibujar texto esto no es excepción, lo que cambia aquí es que ahora usamos un método llamado DrawString() que recibe como parámetros un SpriteFont (el que creamos) un String, un Vector2D para la posición y un Color.
Damos F5 para compilar y ejecutar nuestro proyecto y listo!!! Tenemos texto dibujado en pantalla.
Listo, en unos pocos momentos ya tenemos texto en pantalla, ahora puedes ir de nuevo al archivo MiFont.spritefont y jugar con los valores de las etiquetas y ver qué pasa si los modificas.
Espero que te haya servido este artículo, si tienes dudas, comentarios o sugerencias, con gusto las atenderemos.

July 21st, 2010 - 01:12
Buenas, estube leyendo el tutorial y me parecio muy interesante, queria saber como se puede hacer para cambiar el tamaño de las fuentes en tiempo de ejecucion, osea quiero cargar un solo tipo de letra e imprimirla en diferentes partes con diferentes tamaños.
Saludos y muy bueno el blog!
July 21st, 2010 - 01:17
ya encontre la solucion,
spriteBatch.DrawString(Arial, “HOLA SOY DINAMICO”, new Vector2(0, 0), Color.White, 0.0f, new Vector2(0), 15.0f, SpriteEffects.None, 0.0f);
ese 15.0f es el que le modifica el tamaño
July 21st, 2010 - 09:08
Hola Arturo,
Me ganaste la respuesta y sí, en efecto el método de SpriteBatch tiene 6 sobrecargas, es decir el mismo nombre de método pero con diferente número o tipo de parámetros.
En este caso ese 15.0f es un argumento de escala (scale). Este argumento va a hacer crecer tu font 15 veces su tamaño original.
Muchas gracias por tus comentarios y espero verte muy seguido por aquí, cualquier duda o sugerencia es bienvenida.
Saludos.
July 21st, 2010 - 21:54
Como puedo crear otra ventana en donde pueda imprimir el estado de todos mis objetos?, osea como hago para crear varias ventanas en XNA?
mi idea es algo asi:
en mi ventana principal esta el juego con todos los graficos y eso
quiero crear otra ventanita donde me muestre informacion que solo es relevante para el programador, como los atributos de mis objetos.
Saludos
July 21st, 2010 - 23:17
Mira no hay necesidad de hacer otra ventana en XNA y si lo que quieres es un output para ver el estado de tus objetos, te recomendaría usar:
System.Diagnostics.Debug.WriteLine(String.Format(“Position X = {0}, Y = {1}”, position.X, position.Y));
Este método recibe un objeto, mismo que mandará a la consola de output, siguiendo un poco la notación con formato de C verás que :
String.Format(“Position X = {0}, Y = {1}”, position.X, position.Y)
Aquí creas un “string” que sustituirá el {0} con el valor de position.X y el {1} con el valor de position.Y.
En micaso position es un Vector2 y estoy accediendo a los componentes del mismo.
Para ver el output debes irte a View -> Output dentro de Visual Studio.
Saludos.
July 21st, 2010 - 23:31
perfecto,… no sabia donde encontrar el output de la consola! ya haiba probado eso, ahora esa consola se puede manera? osea un cls por ejemplo, por que son muchos objetos y si no limpio pantalla se amar un despelote!
saludos y gracias por la respuetas!!
July 21st, 2010 - 23:33
perdon por los erorres ortograficos….