Anterior | Índice | Siguiente
Capítulo 2: Mover Sprites
Lenguaje: C#
Para: VS2003
Por Dark-N: hernaldog@gmail.com
Visita mi Blog


http://darknromhacking.com


Objetivo: Mover un Sprite por la pantalla con el teclado.

Un Sprite un objeto 2D como una imagen por ejemplo. Los Sprites tienen 2 propiedades básicas Sprite.X y Sprite.Y lo que nos permite setear coordenadas al Sprite y como el game-loop es un ciclo infinito de renders, ponemos aumentar o disminuir estos X, Y y el objeto se verá en movimiento.
Lo que explicaré ahora, será menos detallado que antes, pero pondré más código, de manera de avanzar más rápido.

Lo primero es agregar esta imagen a la Carpeta Imagenes del proyecto:



Lo que sigue es crear un nueva clase llamada "cap2.cs" de la misma forma que se explicó en el capítulo anterior:



Ahora copia todo el código de la clase cap1.cs y pégalo en cap2.cs, ya que nos basaremos en esa estructura para programar. Ahora cambia todo lo que diga cap1 por cap2. En el código ahora hay que agregar un objeto Surface que contenga la imagen, el código es:
Surface sur_leon = new Surface(@"..\..\Imagenes\leon.PNG");
//En C# el @ en un string es para indicarle al programa que lo que 
//viene es una URL o ruta de acceso

Luego un Sprite carga ese Surface, y se posiciona en el centro de la pantalla con:
Sprite  spr_leon = new Sprite(sur_leon);
spr_leon.Center = new Point(Video.Screen.Width/2,Video.Screen.Height/2);

Después se renderea en pantalla con:
spr_leon.Render(Video.Screen);

Aunque igualmente se puede usar el método Blit del Surface principal que pinta algo en pantalla:
Video.Screen.Blit(spr_leon, new Point(0,0));

Con esto ya se vería la imagen en pantalla, solo falta darle movimiento con el Teclado, si presionamos la fecha arriba se mueve hacia arriba, abajo se mueve abajo y así con las 4 direcciones.
Entonces usamos el Evento propio de SDL .NET para manejo de teclado llamado SdlDotNet.Keyboard.IsKeyPressed(tecla) que se gatilla al Presionar las Teclas del teclado. Entonces en la parte del juego() ponemos el código que moverá el Sprite 5 pixels hacia la dirección que presiones en el teclado:

if (SdlDotNet.Keyboard.IsKeyPressed(Key.UpArrow))
  spr_leon.Y-=5;

if (SdlDotNet.Keyboard.IsKeyPressed(Key.DownArrow))
  spr_leon.Y+=5;

if (SdlDotNet.Keyboard.IsKeyPressed(Key.LeftArrow))
  spr_leon.X-=5;

if (SdlDotNet.Keyboard.IsKeyPressed(Key.RightArrow))
  spr_leon.X+=5;

Notar que la resolución en pantalla es (0,0) desde la esquina izquierda, llegando a (400,300) en la inferior derecha:



Entonces para mover objetos en pantalla debes seguir esta regla:
  • Si quieres subir un Sprite debes aumentar el valor de la propiedad Y del Sprite.
  • Si quieres bajar un Sprite debes disminuir el valor de la propiedad Y del Sprite.
  • Si quieres mover a la derecha un Sprite debes aumentar el valor de la propiedad X del Sprite.
  • Si quieres mover a la izquierda un Sprite debes reducir el valor de la propiedad X del Sprite.

    Ahora para compilar, como tanto cap1.cs y cap2.cs tiene un objeto Main:
    [STAThread]
    public static void Main()
    ...
    

    Entonces hay que decirle al .NET cual de las 2 clases tomará el código para generar el .EXE. Con Rebuild compila AMBOS en busca de errores, pero como están dentro de un mismo Proyecto solo un elemento debe ser la salida. Para esto de configura en las propiedades del Proyecto, como muestra la imagen:



    Como ahora trabajaremos con cap2.cs entonces dejamos este ítem seleccionado en las propiedades.
    Una vez hecho esto, podemos hacer el Rebuild para que .NET compile y vea si hay errores. También construye un ejecutable.

    Finalmente se testea lo que se hizo, presionando F5 y nos muestra en pantalla:



    Mueve las teclas y se moverá el león.

    Recuerda RENOMBRAR el archivo tutorial.exe a cap2_mover_sprite.exe para que en el siguiente capítulo no lo sobreescribas:






    Código fuente de este capítulo:

    //Archivo: cap2.cs
    //Autor: Dark-N
    using System;
    using System.Drawing;
    using SdlDotNet;
    using SdlDotNet.Sprites;
    
    
    namespace tutorial
    {
        
        public class cap2
        {
            Surface sur_leon;
            Sprite  spr_leon;
            TextSprite texto;
            
            public cap2()
            {
                //modo ventana, resolución 400x300
                Video.SetVideoModeWindow(400, 300);
    
                //surface leon
                sur_leon = new Surface(@"..\..\Imagenes\leon.PNG");
    
                //sprite leon en el centro de la pantalla
                spr_leon = new Sprite(sur_leon);
    
                //leon en el centro de la pantalla
                spr_leon.Center = new Point(Video.Screen.Width/2,Video.Screen.Height/2);
                
    
                //creamos un texto
                SdlDotNet.Font fuente = new SdlDotNet.Font("../../fuentes/ARIAL.TTF", 14);        
                texto = new TextSprite("Prueba de Teclas", fuente, Color.Yellow, new Point(5,5));
                
                
                Events.Tick += new TickEventHandler(Events_Tick);
            }
    
            private void Events_Tick(object sender, TickEventArgs e)
            {
    
                // Limpar la pantalla (dejarla negra)
                Video.Screen.Fill(Color.Black);
    
                //aquí LOGICA del nuestro juego
                juego();
    
                
                // Se actualiza la pantalla
                Video.Screen.Update();
            }
    
            // lógica de nuestro juego
            private void juego() 
            {
                            
                texto.Render(Video.Screen);
    
                //OJO: tambien se puede usar BLIT
                //Video.Screen.Blit(texto);
    
                //al presionar las teclas del teclado se mueve el Sprite
                if (SdlDotNet.Keyboard.IsKeyPressed(Key.UpArrow))
                    spr_leon.Y-=5;
    
                if (SdlDotNet.Keyboard.IsKeyPressed(Key.DownArrow))
                    spr_leon.Y+=5;
    
                if (SdlDotNet.Keyboard.IsKeyPressed(Key.LeftArrow))
                    spr_leon.X-=5;
    
                if (SdlDotNet.Keyboard.IsKeyPressed(Key.RightArrow))
                    spr_leon.X+=5;
    
                //igual se puede Video.Screen.Blit(spr_leon, new Point(0,0));
                spr_leon.Render(Video.Screen);
                
            }        
    
            public void Run()
            {    
                Events.KeyboardDown +=new KeyboardEventHandler(this.Keyboard);
                Events.Run();
            }
    
            private void Keyboard(object sender, KeyboardEventArgs e)
            {    
                //Salimos del juego con tecla Escape
                if(e.Key == Key.Escape)
                {
                    Events.QuitApplication();
                }        
            }
    
            [STAThread]
            public static void Main()
            {
                cap2 juego = new cap2();
                juego.Run();
            }
        }
        
    }
    

    Fuentes: Bajar Proyecto VS2003 + SDL.NET 4.0 Cap 1 al 4.



    Anterior | Índice | Siguiente
    Volver a Página Principal

    blog comments powered by Disqus
    2003 - 2018    La Web de Dark-N