Anuncios Google

10. Temporizadores

Tutoriales Avanzados Homebrewes

En este tutorial aprenderemos a usar temporizadores en nuestros programas. Los temporizadores son muy útiles para muchas cosas, pueden hacer que cierto código se ejecute si un periodo de tiempo ha pasado.

Temporizadores (Timers).

Crearemos un sencillo programa que te enseñará a usar temporizadores y mostrará un mensaje en pantalla. El mensaje dependerá del valor del temporizador.

Lo primero será crear un objeto color:

blanco = Color.new (255,255,255)

Para crear un temporizador usaremos el comando Timer.new(). Almacenaremos este temporizador dentro de una variable:

contador = Timer.new()

Para iniciar o detener el temporizador usamos los comandos nombre_temporizador:start() y nombre_temporizador:stop(). Queremos iniciar nuestro temporizador al comiendo del programa, por lo que debes añadir este código:

contador:start()

Fíjate que hemos usado el nombre de nuestro contador en el comando. Lo siguiente que queremos es crear el bucle principal de nuestro programa y añadir el código para limpiar la pantalla en cada bucle. Añade estas líneas:

while true do
screen:clear()

Ahora usaremos el valor actual del temporizador con nombre_contador:time(). Añade a continuación:

tiempoActual = contador:time()

Esto almacenará el valor actual del contador en la variable.

Lo próximo será poner código para mostrar el valor actual del temporizador en pantalla cada bucle. Añade esto:

screen:print(10,10,"Valor del temporizador: " .. tiempoActual,blanco)

Ahora vamos a usar algunas sentencias para comprobar cuando nuestro temporizador está en un cierto valor y entonces mostrar un mensaje. Añade:

if tiempoActual < 1000 then
screen:print(100,100,"Inferior a 1000",blanco)
end

El código comprobará si el valor del temporizador es inferior a 1000. Si lo es, mostrará Inferior a 1000 por pantalla. Ahora añadamos el siguiente código:

if tiempoActual > 1000 and tiempoActual < 2000 then
screen:print(100,100,"Superior a 1000",blanco)
end

Esto comprobará si el valor del temporizador es superior a 1000 pero inferior a 2000. Si lo es, mostrará el mensaje Superior a 1000.

Nuestra sentencia final reiniciará nuestro temporizador a cero si el valor supera 2000. Esto se hace usando el comando nombre_temporizador:reset(numero). El número entre paréntesis es al que se va a iniciar el temporizador. Al reiniciar el temporizador también se parará, por lo cual tendremos que volverlo a iniciar. Mira el siguiente código y añádelo:

if tiempoActual > 2000 then
contador:reset(0)
contador:start()
end

Con este código, cuando nuestro contador supera los 2000, se reiniciará a cero y comenzará de nuevo.

Por último, terminemos nuestro bucle principal:

screen.waitVblankStart()
screen.flip()
end

Guarda el programa y lánzalo para ver un temporizador en acción.

4.62963
Tu voto: Ninguno Votos totales: 4.6 (27 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de -chus-

Una duda XD

Muy buen tutorial, pero mi duda es, como aplicar o poner un temporizador que comiense por ejemplo en 60 sec y que vaya disminuyendo hasta llegar a cero? no se si me entiendan XD con lo poco qee se me doy una idea pero no creo que salga XD uso lua hm v2....gracias un saludo.


                                          Mis Homebrew´s

 http://psp.scenebeta.com/noticia/memorama-games#comment-803033


T & S

Éste sería el trozo problemático:
[...]
if tiempoActual > 10000 and tiempoActual "menor que" 12000 then
screen:blit(0, 0, bomba)
boom = Sound.load("explosion.wav", false)
local sonido = boom
voz = sonido:play()
end
[...]
Luego, después de este efecto he puesto otro, pero es el mismo problema que este. Y también tengo otra duda: ¿El comando del volumen de la música también sirve para los efectos de sonido?
bufff...gracias por ayudar
PD: he puesto "menor que" porque al escribir el comentario, el signo "menor que" lo reconoce como si fuera lenguaje html y hace q no se vea nada a partir de ahi.

Imagen de pucelano

Posible solucion

Creo que este código resolverá tu problema.

 

[...]

if sonando ~= "si" then

    if tiempoActual > 10000 and tiempoActual < 12000 then

        screen:blit(0, 0, bomba)

        boom = Sound.load("explosion.wav", true)

        local sonido = boom

        voz = sonido:play()

        sonando = "si"

    end

end

 

if tiempoActual > 12000 then

    voz:stop()

    sonando = "no"

end

[...]

 

Hacemos que la variable sonando tome el valor “si” cuando se esté reproduciendo el sonido. Si sonando  es diferente de “si” , comprobamos el valor del temporizador para saber si hay que iniciar el sonido. En caso afirmativo reproducimos el sonido, y hacemos sonando = "si" para evitar que se reinicie el sonido.

Cuando tiempoActual sea mayor de 12000, paramos el sonido y hacemos sonando = "no".

En la expresión boom = Sound.load("explosion.wav", true) he puesto true en vez de false, por si el sonido tiene una duracion inferior a 2 segundos. De esta manera el sonido se reproduce en un bucle infinito hasta pararle con la orden voz:stop().

Espero que esta solución te sea válida.

Saludos.

 


Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.


Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.

¡Uooooo! ¡Ahora funciona! ¡Muchas gracias!

Ahora ya se oye el efecto entero, muchas gracias por la ayuda.

Imagen de pucelano

Un placer haberte

Un placer haberte ayudado.

Tambien se podia hacer de forma más elegante mediante la orden voz:playing(), la cual te devuelve true si se está ejecutando el sonido, o false si está parado. Esta orden sustituiría a la variable sonando.

Un saludo


 

Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.


Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.

temporizadores y sonido

A ver, el efecto de sonido es una explosion y dura unos 2 segundos. Entonces, he puesto una cuenta atras utilizando temporizadores (1 segundo es de 0 a 1000 del temporizador), y que cuando llegue a 0, se vea una imagen de una explosion y se oiga el ruido. Si pongo que por un valor del temporizador se oiga un ruido, como el tiempo corre tan rápido, ni se oye. En cambio, si pongo más grande que un valor, empieza el sonido desde 0 cada vez, como si se hubiese colgado la PSP. Entonces, ¿cómo lograr q suene entero?

Imagen de ELeNDeR

Lo siento, pero no entiendo

Lo siento, pero no entiendo exactamente qué quieres hacer o decir. Si pudieras postear algo de código quizás podríamos ayudarte.


Temporizadores y sonido

Está muy bien explicado, pero yo tengo una duda. He puesto que durante un determinado periodo de tiempo del temporizador (2 segundos) se oiga un efecto de sonido, pero en vez de reproducirlo entero, repite siempre el principio, dejando un ruido muy molesto.
¿Cómo lo hago para que en estos dos segundos se reproduzca el sonido entero (que dura esto)?

Imagen de ELeNDeR

Imagino que si el sonido que

Imagino que si el sonido que quieres reproducir dura más de 2 segundos, ése sea el motivo por el que no se reproduzca entero, porque cada 2 segundos comienza la reproducción del sonido. No sé si me explico. Si quieres más ayuda tendrás que explicar más detalladamente cual es el problema, la duración del efecto de sonido, etc.


Imagen de ELeNDeR

Debo reconocer que este

Debo reconocer que este tutorial es el más flojo de todos los publicados hasta ahora de Lua. Imagino que Charlie tendría prisa Pero debo decir que los timers son objetos importantes para los programas y muy útiles. Saludos.

Imagen de Miquel Carol

A mi me has sorprendido

A diferencia del resto, este me ha pillado totalmente por sorpresa. Mis felicitaciones Elender.

Ya son 10!!!!! Para mi es tan valido y util como el resto. No creo q a estas alturas tenga prisa. Solo que cada vez los detalles y apuntes es lógico que sean más especificos.


Podrias decir a cuanto

Podrias decir a cuanto equivale en segundos, ejemplo 2000 cuantos segundos son?

Imagen de ELeNDeR

Creo que son milisegundos,

Creo que son milisegundos, es decir, 2000 milisegundos = 2 segundos. Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.