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 (1740 descargas )

