sábado, 30 de julio de 2011

XNA – Usar Fuentes


En el anterior tutorial vimos como hacer rotaciones y usar la clase Vector2.En todos los juegos siempre hay valores que mostramos, como puntaje, vidas, balas, o simplemente datos que usamos para saber si nuestro código funciono.
Para ello usamos las Fuentes.

En este tutorial usaremos este proyecto.

Agregar una fuente
Las fuentes son código xml donde tiene información sobre el tamaño, tipo de fuente, si es negrita o normal, etc.
Para agregar una fuente debemos hacer click derecho en la carpeta Content de nuestro proyecto, Agregar/Nuevo Elemento.

Luego tendremos una ventana, donde elegiremos “Sprite Font” y le pondremos de nombre Fuente.


Como cargarlo
Primero crearemos la variable que almacenara la fuente, el tipo que lo hace es SpriteFont.

SpriteFont fuente;
Ahora debemos cargar la fuente, la forma es similar como cuando cargamos una imagen.

fuente = Content.Load< SpriteFont >("Fuente");
Con nuestra fuente ya cargada, ya podemos dibujar letras, para ello debemos usar el spritebatch, y entre del Begin y End, dibujamos.

spriteBatch.DrawString(fuente, "Hola, bienvenido a mi juego", new Vector2(100, 100), Color.White);
Primer Parámetro: Se le ingresa la fuente que cargamos.
Segundo Parámetro: Lo que vamos a mostrar, siempre del tipo String, tambien podemos poner por ejemplo, posicion.ToString(), de esa forma nos mostrar la pocision que tiene nuestra imagen.
Tercer Parámetro: La posición.
Cuarto Parámetro: El color del texto.

Configuremos nuestra fuente
Si abrimos nuestro XML de la Fuente, veremos que cada opcion estara dividida por los nombres que explicare aca.

FontName: Es el nombre de la fuente que vamos a usar, lo buscara en la Carpeta Fonts en nuestro Windows.
Size: El tamaño de la fuente.
Spacing: Es el espacio que hay entre letra y letra en pixeles.
UseKerning: Kerning.
Style: Es el estilo de la fuente, puede ser Regular(Regular), Negrita(Bold), Cursiva(Italic) o Negrita y Cursiva(Bold, Italic).
End: Es hasta que caracter va aceptar nuestra Fuente(En ASCII).

Cambiando algunas cosas, podemos obtener algo como esto.

Aca termina el tutorial, para el proximoveremos Colsiones.

Codigo completo
using System;
using System.Collections.Generic;
using System.Linq;using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
 
namespace Mi_Juego_Tutorial_5
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
 
Texture2D caja1;Vector2 posicion_caja1;
 
SpriteFont fuente;
 
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";}
 
protected override void Initialize()
{
base.Initialize();
}
 
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);caja1 = Content.Load< Texture2D >("caja");
fuente = Content.Load< SpriteFont >("Fuente");
}
 
protected override void UnloadContent(){
 
}
 
protected override void Update(GameTime gameTime)
{
KeyboardState key = Keyboard.GetState();
if (key.IsKeyDown(Keys.Right) == true)posicion_caja1.X += 3;
if (key.IsKeyDown(Keys.Left) == true)posicion_caja1.X -= 3;
if (key.IsKeyDown(Keys.Down) == true)posicion_caja1.Y += 3;
if (key.IsKeyDown(Keys.Up) == true)posicion_caja1.Y -= 3;
base.Update(gameTime);
}
 
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
 
spriteBatch.Begin();
spriteBatch.Draw(caja1, posicion_caja1, Color.White);
spriteBatch.DrawString(fuente, "Hola, bienvenido a mi juego", new Vector2(100, 100), Color.White);
spriteBatch.End();
 
base.Draw(gameTime);
}
}
}