Páginas

viernes, 26 de diciembre de 2014

Ejemplo de Gambas3 y uso de la libreria SDL

Ejemplo de Gambas3 

y uso 

de la libreria SDL



Os traigo un ejemplo de uso de la libreria SDL en gambas3, extraido de la forja de aplicaciones de gambas3 de Francia: http://www.gambasforge.org/code-134-noel.html, cuyo autor es Jack  y que Shell lo comentó en el foro de gambas3. La libreria sdl (http://es.wikipedia.org/wiki/Simple_DirectMedia_Layer ) esta integrada en gambas3, mediante el componente gb.sdl (para los gráficos) y gb.sdl.sound (para el sonido)


Os doy una pequeña explicación de como esta hecha:
1) Para poder usar el componente gb.sdl , debes de activarlo en el menu Proyecto/Propiedades/Pestaña Componentes. Como tambien



Al activar estos dos componentes, vamos  a poder usar las clases Window (http://gambaswiki.org/wiki/comp/gb.sdl/window?l=es), Music (http://gambaswiki.org/wiki/comp/gb.sdl.sound/music?l=es)
y tendremos accesos a los eventos _draw() (para redibujar la pantalla) y _KeyPress() (para leer el teclado)


2) La estructura del proyecto:
Es la siguiente:


Podeis ver que el código fuente, tiene un módulo llamado MMain (que tiene el método _main() y es clase de inicio,(lo primero que se ejecutará del programa), y luego la carpeta Datos con las imágenes a usar por la aplicación.


3) Analisis del móulo MMain:
3.1) Inicialmente se define todas las variables del módulo.
La primera definición es la de Private Screen As New Window As "Screen"
que crea un nuevo objeto "Screen" que es una instancia de la clase Windows. A la vez lo enlazamos con un  observador llamado "Screen"

Luego continua definiendo distintas variables integer, boolean, y del tipo "image" que almaceneran las imagenes que usemos.

3.2) Subrutina Main()
Crea unos arrays que se usaran para los copos de nieve y llama la subrutina init()

3.3) La subrutina Init()
Esta subrutina definirá las dimensiones del objeto Screen, definiendo que sea a ventana completa y la muestra.
Cargará la imagenes en la variables mediante:
Nombre_Variable = Image.load(nombre_archivo_imagen)
Cargará tambien la fuente y el texto a mostrar "merry christmas everyone... "
 Charge_Fonte()
 Texte()

y definirá aleatoriametne los puntos de inicio de los copos de nieve.
  Randomize
  For i = 1 To 150
    xp[i] = (Rnd * 8) - 5
    yp[i] = (Rnd * 8) + 1.2
    x2[i] = screen.width
    x2[i] = Rnd(x2[i])
    y[i] = Rnd(y[i])
  Next
Ademas se se encargará de cargar la musica de fondo y ejecutarla:

  Music.Load("Noel.ogg")
  Music.Play(-1, 1)

3.4) Evento screen_draw()
Define lo que hará la aplicación cada vez que se redibuje.
Mediante varios algoritmos simples va colocando las imagenes mediante la orden
Draw.Image()
Para no hacerlo demasiado largo, llama a otras subrutinas:
rosace() ' dibuja un papa noel subido en un globo
Boucing() 'dibuja imagenes rebotando en la pantalla
Traineau() 'muestra un trineo desplazandose por la pantalla
snow() 'muestra efecto de nieve cayendo.
Horror() 'dibuja una papanoel feo y ejecuta distinta musica
scrolle()  'realiza el movimiento del texto por la pantalla

3.5) Evento Screen_KeyPress()
Se encarga de leer el teclado, y si se produce la pulsación de la tecla Escape, para la musica y cierra la ventana y con ello la aplicación.

Os dejo aqui un pequeño video para que veais el resultado:




Descarga del código fuente de NOEL: enlace a la forge gambas (francia)
Descarga del códido fuente BELEN (variante): enlace del drive google

Fuente:
http://www.gambas-es.org/viewtopic.php?f=5&t=4315&highlight= (Shell)