XNA: clase base para manejar sprites

junio 24, 2009


Siguiendo con los post donde explico como creé el Tetris voy a pasar a explicar como crear una base para tener unas buenas clases para manejar los sprites, tanto los controlados por el usuario como los que son manejados automáticamente.

Todo sprite tiene una serie de atributos que lo definen que forman parte de todos los sprites y son los que implementé en la clase SpriteBase de la cual luego derivaran las demás.

Esta clase es reutilizable para todos los juegos de sprites dado que siempre tienen estos atributos. Por ello, se crea como clase abstracta para crear la plantilla que todos seguirán. Ya en las clases derivadas se concretará más para cada juego que deseamos que haga cada sprite dependiendo de su función y finalidad.

Los sprites estan formados por 3 tipos diferentes de datos;

Los datos:
-Texturas (Texture2D texture)
-Posición (Point positon)
-Tamaño de cada frame del sprite (Point frameSize)
-Frame actual (Point currentFrame)
-Cantidad total de frames (Point sheetSize)

el estado del sprite:
-Si se recorta el spirte para detectar colisiones (int collisionOffset)
-Valor del sprite para puntuaciones (int scoreValue).
-Velocidad, cada cuanto se actualiza el frame (float speed).
-Tiempo de actualización de frame (int millisecondsPerFrame).
-Tiempo transcurrido entre actualizaciones de frame (int timeSinceLastFrame).

El audio:
-XACT que explicaré más adelante de este sprite para los efectos sonoros (AudioEngine, WaveBank, SongBank y Cue).

Aparte de los constructores que inicializan estos valores base habrá un método virtual Update en el que se controla la animación del sprite, otro método virtual Draw sin nada que se llenará en las clases derivadas,
public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
}

un método abstacto Direction con solo get para no permitir el nunca el set en las clases derivadas pues es solo de entrada,
public abstract Vector2 direction
{
get;
}

un método de creación del rectángulo para la detección de colisiones
public Rectangle collisionRect
{
get
{
return new Rectangle(
(int)position.X,
(int)position.Y,
(int)frameSize.X,
(int)frameSize.Y);
}
}

y otro para la carga y reproducción del audio.
public void PlayCue(String track)
{
trackCue = soundBank.GetCue(track);
trackCue.Play();
}

El rectángulo para detectar las colisiones simplemente devuelve un Rectangle del tamaño del frame de este para poder manejar las colisiones.

A partir de esta clase base SpriteBase derivaran tanto las clases de manejo de sprites controlados por el usuario, como los automáticos y el background. Cada una de estas las comentaré más adelante, esto es todo de momento.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: