En este ejemplo desarrollo una animación de un automóvil que se desplaza de un lado a otro hasta que choca con un árbol.
Mientras en automóvil se desplaza hay un sonido de ambiente de fondo y cuando choca hay 2 sonidos uno es el de frenado de auto y el otro es cuando choca. Para animar el automóvil uso el control Timer.
El código para animar es muy simple:
Controles:
Timer1.Interval = 1 este control es el principal y donde va casi toda la programación que seria la siguiente:
Private Sub Timer1_Timer() Static Contador As Integer Static SonidoF As Boolean Static SonidoE As Boolean ImgCarro1.Left = ImgCarro1.Left + 80 If ImgCarro1.Left > Me.Width Then ImgCarro1.Left = -50 Contador = Contador + 1 End If If Contador >= 3 Then ImgArbol.Visible = True If ImgCarro1.Left >= 3640 And ImgCarro1.Left <= 11160 And SonidoF = False Then Call ReproducirSonido(SonidFrenada, False) SonidoF = True End If If ImgCarro1.Left >= 11160 And SonidoE = False Then ImgExplosion.Visible = True Call ReproducirSonido2(SonidExplosion, False) SonidoE = True Timer1.Enabled = False End If End If End Sub
Lo que hace que la imagen del auto se desplace es la propiedad Left del control image:
ImgCarro1.Left = ImgCarro1.Left + 80
En cada interacción del control timer se le suma 80 a la propiedad left lo que hace que parezca que automóvil se mueve.
Luego valido que cuando el auto llegue al final del formulario se devuelva:
If ImgCarro1.Left > Me.Width Then ImgCarro1.Left = -50 Contador = Contador + 1 End If
Yo Quiero que el auto de 3 vueltas osea que vaya y vuelva 3 veces antes de mostrar el arbol para eso uso un variable de tipo Static contador para llevar la cuenta y cuando llegue a 3 mostrar la imagen del arbol que tiene la propiedad visible = falta.
If Contador >= 3 Then ImgArbol.Visible = True
Cuando el auto esta por llegar al arbol quiero reproducir el sonido de frenado para eso tomo la propiedad left de alto cuando falte una distancia ya definica y valido que cuando sobre pase reproduzca el sonido de frenado.
If ImgCarro1.Left >= 3640 And ImgCarro1.Left <= 11160 And SonidoF = False Then Call ReproducirSonido(SonidFrenada, False) SonidoF = True End If
Para que no se siga reproduciendo el sonido uso la variable SonidoF = True así que cuando cuando se reproduzca el sonido solo lo ara una vez.
Para el choque del auto es igual cuando la propiedad Left del auto llegue a la propiedad del left del arbol reproduzca el sonido de choque y muestre la imagen de la explosión y detemos el Timer usando su propiedad Enabled = false, para que el auto se detenga y no siga.
If ImgCarro1.Left >= 11160 And SonidoE = False Then ImgExplosion.Visible = True Call ReproducirSonido2(SonidExplosion, False) SonidoE = True Timer1.Enabled = False End If
Para reproducir el sonido usamos un control llamado WindowsMediaPlayer y uso la siguientes funciones para reproducir.
Sub ReproducirSonido(nombre, Repertir As Boolean) WindowsMediaPlayer1.url = App.Path & "\sonidos\" & nombre If Repertir = True Then WindowsMediaPlayer1.settings.setMode "loop", True Else WindowsMediaPlayer1.settings.setMode "loop", False End If End Sub Sub ReproducirSonido2(nombre, Repertir As Boolean) WindowsMediaPlayer2.url = App.Path & "\sonidos\" & nombre If Repertir = True Then WindowsMediaPlayer2.settings.setMode "loop", True Else WindowsMediaPlayer2.settings.setMode "loop", False End If End Sub
Uso 2 funciones porque debo reproducir 2 sonido casi al mismo tiempo por eso también uso 2 controles de WindowsMediaPlayer.
Para reproducir el sonido solo es pasarle la url de sonido MP3 y le paso si se repite o no se repite el sonido
WindowsMediaPlayer1.url = App.Path & "\sonidos\" & nombre
El código del Ejemplo lo puedes descargar de aquí Animación y Sonido en Visual Basic 6 (333 descargas )