Anterior | Índice | Siguiente
Capítulo 3: Mouse y Sonidos
Lenguaje: C#
Para: VS2003
Por Dark-N: hernaldog@gmail.com
Visita mi Blog


http://darknromhacking.com


Objetivo: Al hacer clic en pantalla se pintan sprites, al presionar Espacio se reproduce un sonido. Se debe escuchar en todo momento una música de fondo.

Para este capítulo se crea un clase nueva cap3.cs y se copia todo el código de cap2.cs (esta mejor estructurado), cambiando todo lo que diga cap2 por cap3, como se hizo en el capítulo anterior.
Se copia la siguiente imagen en la carpeta Imagenes:


Luego se crea un carpeta Sonidos y tomaremos una midi de Super Mario 64 a modo de ejemplo, se trata de esta midi y la copiamos dentro de Sonidos, lo mismo con esta otra WAV:



Ahora a programar.

Se crean las variables resx y resy desde un principio para tener la resolución X,Y de la pantalla almacenadas allí:
int resx=400;
int resy=300;

Luego se usarán en el constructor para seteo de la pantalla:
Video.SetVideoModeWindow(resx, resy);

Se crean las variables de Sonido y Música de SdlDotNet:
Sound sonido;
Music musica;

Dentro del constructor seteamos las variables de sonido y música a los archivos respectivos:
musica = new Music(@"..\..\Sonidos\m64bomb.mid");
sonido = new Sound(@"..\..\Sonidos\clic.WAV");

Luego le damos "Play" a la música de fondo:
musica.Play(true);

Agregamos el texto "ESC: Salir" abajo-derecha de la pantalla utilizando variables resx y resy.
texto = new TextSprite("ESC: salir", new SdlDotNet.Font("../../fuentes/ARIAL.TTF", 11), Color.White, new Point(resx-58,resy-15));
texto.Render(Video.Screen);

Hacemos transparente el color negro del imagen bola.bmp, el negro es el borde de la esfera. Usamos el método TransparentColor de la clase Sprite:
sur_bola.TransparentColor = Color.Black;

Esto es muy útil para pintar objetos redondos de forma de hacer transparente los bordes.

Para el manejo del Mouse, SDL.NET nos entrega una simple función de la Clase Mouse y un método llamado IsButtonPressed (primer/segundo botón):
if (Mouse.IsButtonPressed(MouseButton.PrimaryButton))
{
  // el primer botón del mouse fue presionado
}

Como queremos que la bola se pinte en pantalla cuando se haga clic entonces ponemos:
if (Mouse.IsButtonPressed(MouseButton.PrimaryButton))
{						
    spr_bola.X = Mouse.MousePosition.X;
    spr_bola.Y = Mouse.MousePosition.Y;
    spr_bola.Render(Video.Screen);
}

Luego si queremos que al presionar Espacio se escuche un sonido, programamos en el manejador de teclado
private void Keyboard(object sender, KeyboardEventArgs e)
{
...
  if(e.Key == Key.Space)
  {	
      sonido.Play();				
  }		
}

Igualmente dentro del manejador de Teclado, no se te debe olvidar que al presionar Escape se sale de la aplicación, entonces cerramos los sonidos que se reproducen:
if(e.Key == Key.Escape)
{				
    musica.Close();
    sonido.Stop();
    Events.QuitApplication();
}

Finalmente agregaremos un ícono al ejecutable, para esto tomamos un icono de mario bros:

y lo pegamos en la carpeta Imagenes:


Luego dentro de las propiedades del proyecto escoge el icono:



Esto hará que se tenga un archivo de salida "tutorial.exe" con un ícono encrustado:



Ahora solo Recompila el proyecto y no debería arrojar errores. Si quieres presionas F5 para Testearlo y verás algo así:



El programa que hiciste funciona ok, pero fíjate en la parte superior lo siguiente:
  • El ícono se perdió
  • El Caption de la Ventana dice "SDL_app".
  • No se puede cerrar con la 'X'.

    Cambiar Caption de la Ventana

    Usar Video.WindowCaption = "texto". Ejemplo:

    Video.SetVideoModeWindow(400, 300);
    Video.WindowCaption = "Tutorial SDL";

    Cambiar Ícono

    Usar Video.WindowIcon(System.Drawing.Icon icono) o Video.WindowIcon(Surface.icon icono). Ejempo usando System.Drawing.Icon, se debe tener dentro de la carpeta "Imagenes" un ícono llamado "mario3.ico":

    Video.SetVideoModeWindow(400, 300);
    Video.WindowIcon(new System.Drawing.Icon("../../Imagenes/mario3.ico"));
    

    Cerrar con la 'X'

    Ya que codificamos sobre una clase, al abrirse la ventana con el juego, no podíamos salir de la aplicación usando la típica 'X' de cada ventana, por lo que programamos que se salga con la Tecla ESC.
    Para cerrar con 'X' debemos crear un Manejador de Evento de Salida, dentro del metodo Run() llamado Events.Quit de esta forma:

    public void Run()
    {	
      ...
      Events.KeyboardDown += new KeyboardEventHandler(Events_KeyboardDown);  
      Events.Quit += new QuitEventHandler(Events_Salir);
      Events.Run();
    }
    
    private void Events_Salir(object sender, SdlDotNet.QuitEventArgs e)
    {
      Events.QuitApplication();
    }

    Ahora si tenemos algo de mejor nivel, y si puedes cerrar con la 'X':


    Finalmente recuerda con Explorar de Windows ir a la carpeta Debug/Bin del proyecto y renombrar tutorial.exe a cap3_mouse_sonido.exe para que en lo siguientes capítulos no lo sobreescribas:




    Código fuente de este capítulo:

    //Tutorial de SDL.NET
    //Archivo: cap3.cs
    //Autor: Dark-N (naldo_go@hotmail.com)
    //Fecha: 22-11-2006
    //Capitulo 3: Mouse y Sonido
    
    using System;
    using System.Drawing;
    using SdlDotNet;
    using SdlDotNet.Sprites;
    
    using System.Threading;
    
    namespace tutorial
    {
        
        public class cap3
        {
            //variables que almacenan resolución de pantalla
            int resx=400;
            int resy=300;
            
            Surface sur_bola;
            Sprite  spr_bola;
            TextSprite texto;
            
            Sound sonido;
            Music musica;     
                    
            public cap3()
            {
                Video.SetVideoModeWindow(resx, resy);
                Video.WindowCaption = "Tutorial SDL: Capitulo 3";
                Video.WindowIcon(new System.Drawing.Icon("../../Imagenes/mario3.ico"));
    
                sur_bola = new Surface(@"..\..\Imagenes\bola.bmp");            
                spr_bola = new Sprite(sur_bola);
    
                musica = new Music(@"..\..\Sonidos\m64bomb.mid");
                sonido = new Sound(@"..\..\Sonidos\clic.WAV");
    
                //creamos un texto informativo
                SdlDotNet.Font fuente = new SdlDotNet.Font("../../fuentes/ARIAL.TTF", 14);        
                texto = new TextSprite("Haz clic en le Pantalla y escucha la música.", fuente, Color.Yellow, new Point(5,5));
                texto.Render(Video.Screen);    
                texto = new TextSprite("Presiona Espacio para reproducir un sonido.", fuente, Color.Yellow, new Point(5,20));
                texto.Render(Video.Screen);    
    
                //texto ESC: salir
                texto = new TextSprite("ESC: salir", new SdlDotNet.Font("../../fuentes/ARIAL.TTF", 11), Color.White, new Point(resx-58,resy-15));
                texto.Render(Video.Screen);    
                
                //el color negro será transparente
                sur_bola.TransparentColor = Color.Black;
    
                //tocamos musica de fondo, repeat:on
                musica.Play(true);            
    
                Events.Tick += new TickEventHandler(Events_Tick);
            }
    
            private void Events_Tick(object sender, TickEventArgs e)
            {                
                juego();            
                Video.Screen.Update();
            }
    
            // lógica de nuestro juego
            private void juego() 
            {                
                if (Mouse.IsButtonPressed(MouseButton.PrimaryButton))
                {                        
                    spr_bola.X = Mouse.MousePosition.X;
                    spr_bola.Y = Mouse.MousePosition.Y;
                    spr_bola.Render(Video.Screen);
                }
            }
        
            public void Run()
            {    
                Events.KeyboardDown +=new KeyboardEventHandler(this.Keyboard);
                Events.Quit += new QuitEventHandler(Events_Salir);
                Events.Run();
            }
    
            private void Events_Salir(object sender, SdlDotNet.QuitEventArgs e)
            {
                musica.Close();
                sonido.Stop();
                Events.QuitApplication();
            }
    
            private void Keyboard(object sender, KeyboardEventArgs e)
            {    
                //Salimos del juego con tecla Escape
                if(e.Key == Key.Escape)
                {                
                    musica.Close();
                    sonido.Stop();
                    Events.QuitApplication();
                }
    
                //Espacio para escuchar sonido
                if(e.Key == Key.Space)
                {    
                    sonido.Play();                
                }        
            }
    
            [STAThread]
            public static void Main()
            {
                cap3 juego = new cap3();
                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