xna

XNA tutorial 2 – clase AirCraft

En el artículo anterior use un modelo para mostrar que la cámara funcionaba como era esperado, pero la forma de dibujarlo era desprolija y estaba dentro de la clase Game1. Hoy voy a separar esa información para tenerla ordenada y de paso discutir un poco la clase AirCraft que vendría siendo el avión que vamos a controlar.

Entre los atributos principales tenemos el modelo, la textura y la posición. Los demás atributos son secundarios (pero aún útiles) y están explicados en el código.

Estoy haciendo un esfuerzo y voy a dejar algunos comentarios en español (aunque parezca mentira me cuesta recordar esto), pero si algún lector tiene una duda puede preguntar vía comentario.

public class AirCraft
{
    private Model model;
    private Texture2D texture;
    private Vector3 position;

    private string modelAsset = "untitled";
    private string textureAsset = "Ship_06";

    private float speed = 20;

    public AirCraft(Vector3 position)
    {
        this.position = position;
    }

    public void Load(ContentManager content)
    {
        model = content.Load<Model>(modelAsset);
        texture = content.Load<Texture2D>(textureAsset);
    }

    public void Update(GameTime gameTime)
    {
        Vector3 movement = Vector3.Zero;

        // cuanto tiempo paso desde el ultimo frame hasta el actual
        float deltaT = (float)gameTime.ElapsedGameTime.TotalSeconds;
        /*
         * DeltaT sirve para calcular la cantidad de unidades que nos movemos en este frame.
         * Si decidimos que la velocidad de la entidad (nave) es de 1 metro por segundo,
         * hay que realizar una regla de tres
         * ya que en un segundo pueden entrar varios (muchos generalmente) frames.
         * */

        // actualizamos el vector movement que indica cuanto nos movemos en este frame particular
        if (Keyboard.GetState().IsKeyDown(Keys.Left))
            movement.X -= deltaT * speed;
        else if (Keyboard.GetState().IsKeyDown(Keys.Right))
            movement.X += deltaT * speed;

        // actualizamos la posicion
        position += movement;
    }

    public void Draw()
    {
        /*
         * Para dibujar el modelo copiamos sus transformaciones a una matriz.
         * Esto sirve para luego aplicar calculos matematicos a cada set de
         * transformaciones de cada mesh.
         * */

        Matrix[] contenedor = new Matrix[model.Bones.Count];
        model.CopyAbsoluteBoneTransformsTo(contenedor);

        foreach (ModelMesh mesh in model.Meshes)
        {
            foreach (BasicEffect effect in mesh.Effects)
            {
                effect.World = contenedor[mesh.ParentBone.Index]
                    * Matrix.CreateTranslation(position);
                effect.View = Camera.View;
                effect.Projection = Camera.Projection;
                effect.TextureEnabled = true;
                effect.Texture = texture;
            }
            mesh.Draw();
        }
    }
}

La clase es bastante auto explicativa, pero si tienen dudas dejen el comentario.

Acá dejo la solución para que la descarguen.

1 thought on “XNA tutorial 2 – clase AirCraft”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s