[Olpc-uruguay] Consultas Pygame

Gabriel Eirea geirea en gmail.com
Vie Feb 19 13:23:51 EST 2010


Flavio:

A mí me resulta más útil utilizar un timer que genere un evento luego
de transcurrido cierto tiempo. De esta forma en tu lazo principal vos
estás esperando por eventos y cuando el timer termina lo podés
detectar fácilmente.

Ejemplo (sacado de Conozco Uruguay):

# constantes
EVENTORESPUESTA = pygame.USEREVENT+1
TIEMPORESPUESTA = 2300

# en algún lado, como respuesta a alguna acción del usuario
pygame.time.set_timer(EVENTORESPUESTA,TIEMPORESPUESTA)

# en el lazo principal
       while 1:
            for event in wait_events():
                if event.type == pygame.KEYDOWN:
                    if event.key == 27: # escape
                        self.click.play()
                        pygame.time.set_timer(EVENTORESPUESTA,0) #
cancelo el timer
                        return
                elif event.type == pygame.MOUSEBUTTONDOWN:
                    # acá va el código de respuesta a un clic del usuario
                elif event.type == EVENTORESPUESTA:
                    # primero cancelo el timer para que no se siga repitiendo
                    pygame.time.set_timer(EVENTORESPUESTA,0)
                    # acá va lo que hay que hacer una vez transcurrido el tiempo

Es probable que te convenga pensar la lógica del juego como una
máquina de estados y el timer lo único que hace es cambiar el estado,
por ejemplo de "PAUSA" a "ACTIVO" o algo así.

Saludos,

Gabriel





El día 19 de febrero de 2010 14:18, Flavio Danesse
<fdanesse at gmail.com> escribió:
> tengo un problemita con esto:
>
> pygame.time.delay(1500)
>
> Se supone que esto pausa el programa por determinado tiempo, segun el nº
> entre paréntesis, sin embargo, si yo quisiera por ejemplo pausarlo por 10
> segundos, con este metodo no lo consigo, por mas alto que sea el numero que
> le ponga, nunca lo pausa más de un segundo aproximadamente.
> Se supone que el numero entre paréntesis son milésimas de segundo ¿no?
> Bueno, ¿como hago para pausar el programa por mas de 1 segundo?
>
> Otra cosa, supongamos que en el programa pasa algo y ese algo debe
> reproducir un sonido, pero mientras se reproduce el sonido, no puede seguir
> el programa. Es decir, que el programa reproduce un sonido y cuando este
> termina de reproducirse, el programa sigue su ejecución.
> ¿Cómo lo hago?
>
> En terminos generales, no me agrada tener un while infinito en un programa y
> es fundamental en pygame. Preferiría tener un timer en lugar de estos
> bucles, que se ve no van conmigo, en particular cuando hay que detenerlos o
> pausarlos para continuar luego de que una condicion se ha cumplido.
>
>
>
>
> El 17 de febrero de 2010 19:47, Federico Moreira <federico at linux.com.uy>
> escribió:
>>
>> Lo que Pablo quiere decir (si entendí bien) es que mandes el método
>> actualizar cuando haya, por ejemplo, un pygame.MOUSEBUTTONDOWN, etc y no por
>> cada iteración del loop.
>>
>> Si sabés que el click del mouse cambia algo en la pantalla, mandate un
>> refresh, sino, no hagas nada.
>> _______________________________________________
>> Olpc-uruguay mailing list
>> Olpc-uruguay at lists.laptop.org
>> http://lists.laptop.org/listinfo/olpc-uruguay
>>
>
>
> _______________________________________________
> Olpc-uruguay mailing list
> Olpc-uruguay at lists.laptop.org
> http://lists.laptop.org/listinfo/olpc-uruguay
>
>


More information about the Olpc-uruguay mailing list