martes, 13 de octubre de 2009

Clases y herencias en XNA e introduciendo la función windows live games

Bueno, vamos con el siguiente tutorial, este a nivel visual no hace nada, vamos a crear clases y otras que hereden de estas para que despues a la hora de hacer nuevos personajes, fondos, etc, no nos cueste tanto, adelante:

1.- He creado a la clase actor, esto lo he hecho en el explorador de soluciones haciendo click derecho en la raiz del proyecto /agregar /nuevo elemento




a este le he llamado actor.cs


2.- Bien, ahora vamos a introducir todo lo que tendrá nuestro actor, abrimos el documento actor.cs y nos saldra casi vacio, viendo solo el nombre del proyecto de nuestra clase, escribimos dentro nuestras primeras lineas:

public Texture2D imagen;
public Vector2 posicion = new Vector2(1, 1);
public Rectangle rectangulo1;

La primera como ya sabeis es para guardar una imagen, en el segundo guardamos la posición en la que se pintará la imagén y la tercera de momento no es relevante, la comentaré en el siguiente tutorial "comprobar choques entre rectangulos", ahora añadiremos las siguientes lineas:

public int velocidad= 0;
public int aceleracionX=0;
public int aceleracionY = 0;

serán la velocidad y aceleraciones que podrá tener cualquier personaje que aparezca en el juego.

3.- Igual que hicimos antes, pero ahora la clase que creemos se llamará personaje.cs, será nuestro personaje principal

4.- Tendremos que indicarle que extiende de actor, asi que en la linea que define la clase la dejaremos asi:

class personaje : Actor

hemos añadido eso de ": Actor" para indicar que nuestra clase personaje extiende de actor y por lo tanto hereda todas sus variables y metodos "aunque aun los actores no tengan metodos, pero si todos los actores tienen metodos comunes los pondremos ahi"

Ahora declaramos los metodos a nuestro personaje, estos serán controles() y refrescaprotagonista():

public void controles()
{
if (GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.X > 0)
{
if (aceleracionX < 5)
{
aceleracionX++;
}
if (aceleracionX > -5)
{
aceleracionX--;
}
}
}



public void refrescaProtagonista()
{
rectangulo1 = new Rectangle((int)posicion.X, (int)posicion.Y, imagen.Width, imagen.Height);


controles();


posicion.X += aceleracionX;
posicion.Y -= aceleracionY;


}


Con el primero de ellos hago que al pulsar el stick en determinada dirección la imagen se mueva a izquierda o derecha, con el sigueinte metodo conseguimos que la posición cambie respecto a la aceleración que tenga nuestro personaje, os recuerdo que en los metodos loadcontent de Game1 tendremos que cargar la imagen de nuestro personaje, en draw pintarlo y en update determinar si cambia la posición usando la función creada, refrescaProtagonista()

5.- Ahora procedemos a probarlo y si, tenemos mas o menos lo mismo que antes, pero hemos conseguido algo importante para desarrollar a partir de aqui:

a) Tenemos una clase actor en la que podremos declarar todos los metodos de los personajes que aparezcan en nuestro juego posteriormente.

b) Hemos creado a nuestro personaje, ahí podremos jugar con la aceleración para hacer que este, salte o caiga



6.- Voy a terminar comentando un componente que veo bastante util, sobretodo si queremos posteriormente usar el juego en red, o guardar los saves "identificandolos", esta es:

Components.Add(new GamerServicesComponent(this));


Esta linea se añade en el constructor de nuestro juego quedando así:

public Game1()
{
Components.Add(new GamerServicesComponent(this));

graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";

}


Gracias a esto, pulsando el botón guia de Xbox o el boton inicio yo tengo ya lo siguiente en pantalla:




Aun no he trasteado con este sistema, pero seguro que sirve para organizar partidas online o guardar datos de distintos usuarios. Bueno, hay queda esto, como siempre adjunto el codigo fuente del codigo de este tuto:





PD: Si las cosas no se entienden o no gusta este metodo para explicarlo, no dudeis en comentar, las criticas constructivas siempre ayudan.

PD2: He visto cosas en el codigo de ultima hora, pero han sido a la hora de definir la aceleración

No hay comentarios: