domingo, 17 de julio de 2011

XNA - Cargar imagenes


En el anterior tutorial creamos un proyecto nuevo de XNA y examinamos las funciones, ahora si miramos el codigo que nos genero la IDE, hay dos cosas importante que aclarar ahi.

- GraphicsDeviceManager: Esta clase inicia nuestra tarjeta grafica para trabajar con ella, dentro de sus propiedades podemos encontrar muchas cosas sobre hardware. Pero no miren mucho eso, ya que tiene cosas mas avanzadas, mejor no confundirse ni nada.
- SpriteBatch: Esta clase contiene las funciones para que nosotros podamos dibujar imagenes y texto.

La imagen
Cuando queremos agregar una imagen, debemos hacerla dentro de la carpeta Content de nuestro proyecto.

Nota: No solo imágenes, también debemos guardar modelos 3D, sonidos, XML, etc.

Para agregar la imagen, debemos hacer click derecho en Content, Agregar/Elemento Existente.

Luego nos aparecerá una ventana que nos pedirá la imagen que queremos agregar. Los formatos permitidos son.
- BMP
- JPG/JPEG
- PNG
- TGA
- DDS

Una ves nuestra imagen cargada, nos quedara algo asi en el explorador de soluciones.
Como cargarla
Las imágenes se guardan con la clase Texture2D, para poder cargarla primero debemos declarar la variable. Arriba, en las declaraciones(junto con GraphicsDeviceManager y SpriteBatch colocaremos.
Texture2D imagen;
En la función LoadContent.
imagen = Content.Load<; Texture2D >;("img3");
Acá frenamos un segundo.
-La propiedad Content, es de nuestra clase, la obtiene cuando se Hereda la clase Game a la nuestra. Como su nombre lo dice, trabaja sobre nuestra carpeta Content.
-La función Load, se utiliza para cargar, dentro de las <; >; se coloca el tipo de objeto que vamos a cargar, como la nuestra es del tipo Texture2D, le ponemos Texture2D.
-Dentro de los paréntesis, seguido de unas comillas colocamos la ruta de nuestra imagen, hay dos cosas a tener en cuenta, primero que nosotros no debemos poner Content//img3, eso es por que arriba esta puesto Content.RootDirectory, ahí se le dice donde esta nuestro Content. Y segundo, no debemos poner la extensión de nuestra imagen, con solo poner el nombre alcanza, así también con lo que sea que estemos cargando.

Como la muestro
Nos saltearemos hacia la función Draw.
Cuando estemos por dibujar alguna imagen, debemos usar el spritebatch.
Primero, nosotros debemos iniciar el spritebatch, luego, colocar todas las imágenes que vamos a dibujar, y por ultimo, cerrar el spritebatch.
spriteBatch.Begin();
spriteBatch.Draw(imagen, new Rectangle(0, 0, imagen.Width, imagen.Height), Color.White);
spriteBatch.End();
amos a descomponer esto:
-Empezamos a dibujar ->; spriteBatch.Begin();
-Usamos la propiedad Draw del spritebatch para dibujar.
Como primer parámetro, pide el nombre de la variable donde guardamos la textura. Como segundo parámetro, pide un un valor del tipo Rectangle(esto en nuestro juego, es como la función rectángulo del paint), los primeros dos parámetros dentro del parentesis es la posicion X e Y, los siguiente es el ancho y alto, ahi le colocamos el ancho y alto de nuestra imagen.
-Cerramos el spritebatch ->; spriteBatch.End();

Al momento de iniciar esto, nos saldra una ventana como esta.

Acá termina el tutorial, en el próximo tutorial veremos como darle movimiento a nuestra imagen.
Codigo Final
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
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D imagen;
 
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
 
protected override void Initialize()
{
 
base.Initialize();
}
 
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
imagen = Content.Load<; Texture2D >;("img3");
}
 
protected override void UnloadContent()
{
 
}
 
protected override void Update(GameTime gameTime)
{
 
 
base.Update(gameTime);
}
 
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
 
spriteBatch.Begin();
spriteBatch.Draw(imagen, new Rectangle(0, 0, imagen.Width, imagen.Height), Color.White);
spriteBatch.End();
 
base.Draw(gameTime);
}
}
}