Animando Sprites (2ª y última parte)

Saludos de nuevo, en esta nueva parte del tutorial de animando sprites aprenderemos a animar a nuestro personaje usando el teclado para que camine hacia la izquierda o derecha. Este tutorial es una continuación del anterior (Animando Sprites) asi que os aconsejo visitarlo antes para ver donde lo dejamos, podeís ir directamente desde aquí: Animando Sprites.

Comencemos planteando que es lo que queremos conseguir, necesitamos que nuestro personaje se mueva por la pantalla según nosotros pulsemos las teclas, para este ejemplo sólo he hecho que el personaje se mueva de izquierda a derecha. Para esta ocasión me he creado 3 sprites sheet, una corresponde al movimiento de caminar hacia la izquierda, otra al de caminar hacia la derecha, y la tercera es el tránsito de girarse de izquierda a derecha o viceversa para invertir la dirección hacia donde caminaba nuestro personaje.

La idea básica que he seguido ha sido la de crear 4 texturas animadas, 3 para cada spritesheet y una más que me indica cual es la activa. (La que estamos usando en un momento dado.) Para saber cual es la que tengo que usar en cada momento he usado un tipo enumerado con 3 valores: izq,dcha y gira, y que son las que indican en que estado me encuentro. Por defecto he empezado la animación en el estado de gira.

Pues vamos a ver los cambio realizado a la clase Game1:

public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        private TexturaAnimada girar;
        private TexturaAnimada andarIzq;
        private TexturaAnimada activa;
        private TexturaAnimada andarDcha;
        private Vector2 spritePos;
        KeyboardState estadoActual = new KeyboardState();
        KeyboardState estadoAnterior = new KeyboardState();
        enum State { gira, izq, dcha };//Posibles estados en los que puede encontrarse un frame.
        State estado;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            spritePos = new Vector2(graphics.PreferredBackBufferWidth/2,50);
            girar = new TexturaAnimada(spritePos, 3, 4);
            andarIzq = new TexturaAnimada(spritePos, 12, 10);
            andarDcha = new TexturaAnimada(spritePos, 12, 10);
            activa = girar;//La textura animada por defecto será la de girar.

        }

        protected override void Initialize()
        {
            estado = State.gira;//Estado inicial.
            base.Initialize();
        }

        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            girar.Load(Content, "normal");
            andarIzq.Load(Content, "izq");
            andarDcha.Load(Content, "dcha");
        }

En esta parte como podéis ver, simplemente defino todas las nuevas variables que necesitaré y las inicializo. Las variables de tipo KeyboardState nos ayudarán a controlar de forma adecuada la respuesta del personaje a través de la pulsación de las teclas. Por útimo cargo las texturas en el método Load.

Veamos ahora el método Upload:

protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
this.Exit();
estadoActual = Keyboard.GetState(); //Obtenemos el estado actual de las teclas.
comprobarTeclado(gameTime);
estadoAnterior = estadoActual; //Copiamos en estado anterior el estado actual.
base.Update(gameTime);
}

Como véis, aquí llamamos al método comprobar teclado que es el que se encarga de todo, el método es el siguiente:

        void comprobarTeclado(GameTime gameTime) {

            switch (estado)
            {
                case State.gira:
                    comprobarTecladoGira(gameTime);
                    break;
                case State.izq:
                    comprobarTecladoIzq(gameTime);
                    break;
                case State.dcha:
                    comprobarTecladoDcha(gameTime);
                    break;

            }

Dependiendo del estado actual comprobaremos las teclas pero atendiendo a diferentes patrones, los siguientes métodos podéis encontrarlos en el archivo Game1.cs dentro del proyecto, que tenéis arriba para descargar.

Creo que con esta explicación se ve más o menos la idea que sigo para realizar este ejemplo, no es la única forma de hacerlo, pero es así como se me ha ocurrido. De todas formas, si tenéis alguna pregunta, no dudéis en dejar un comentario o abrir un post en el foro, saludos!😉

Código fuente

Descargar AnimarSprites2.zip 191Kb (XNA 3.0)

Descargar AnimarSprites2.zip 191Kb (XNA 4.0)

Usar las siguientes teclas: Flecha derecha, flecha izquierda. Escape para salir.

Video

13 pensamientos en “Animando Sprites (2ª y última parte)

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