Módulo de pygame para interactuar con eventos y pedidos.
Otras páginas:
Pygame maneja todos sus mensajes de eventos a través de una cola
de eventos. Las rutinas de este módulo le ayudarán a manejar esta
cola de eventos. Los eventos de entrada son extremadamente dependientes
del módulo display
de pygame. La cola de eventos no funcionará a menos
que se halla inicializado el módulo display y el modo de video.
La cola de eventos es una lista de objetos Event, hay diversas maneras de acceder a los eventos que esta contiene. Desde consultar por la existencia de eventos, a extraerlos directamente de la pila.
Todos los eventos tienen un identificador type
. Este identificador
está entre los valores NOEVENT y NUMEVENTS. Todos los eventos definidos
por el usuario pueden tener el valor de USEREVENT o superior. Se recomienda
asegurarse de que sus identificadores de evento sigan este sistema.
Para obtener el estado de varios dispositivos de entrada puede olvidar
la cola de eventos y acceder a los dispositivos directamente desde sus
módulos asignados: mouse
, key
y joystick
. Si usa este método,
recuerde que pygame requiere alguna forma de comunicación con el sistema
de ventanas y otras partes del sistema. Para mantener a pygame en
coherencia con el sistema necesita llamar a pygame.event.pump
periodicamente, usualmente una vez por ciclo del bucle de juego.
La cola de eventos ofrece una forma de filtro simple. Esto puede ayudar
a mejorar el rendimiento bloqueando ciertos tipos de eventos de la
cola, use las funciones pygame.event.set_allowed()
y
pygame.event.set_blocked()
para trabajar con este filtrado. Por
defecto todos los eventos están permitidos.
Los controles de Joystick no emitirán ningún evento a menos que se inicialice el dispositivo.
Un objeto Evento contiene un tipo de evento y un conjunto de miembros, o
atributos, de solo lectura. El objeto Evento no contiene métodos, solo
información. Estos objetos se obtienen desde la cola de eventos. E incluso
puede crear sus propios eventos con una llamada a pygame.event.Event()
.
Su programa debe seguir ciertos pasos para evitar que la cola de eventos se sobrepase del límite. Si el programa no limpia o elimina los eventos de la cola de eventos en intervalos regulares, esta podría desbordarse. Se lanzará una excepción si la cola desborda.
Todos los objetos Event
contienen un identificador de tipo en el
atributo Event.type
. Usted puede obtener acceso a todos los atributos
del evento a través el método Event.dict
. Todas las otras búsquedas
de atributos pasarán a través de los valores de diccionario del evento.
Puede imprimir los objetos Event para ver rápidamente su tipo y atributos mientras depura o experimenta. Los eventos que vienen desde el sistema tendrán un grupo asegurado de atributos basados en cada tipo. Esta es una lista de los atributos de evento que se definen para cada tipo:
Tipo (atributo type ) | Atributos |
---|---|
QUIT | none |
ACTIVEEVENT | gain, state |
KEYDOWN | unicode, key, mod |
KEYUP | key, mod |
MOUSEMOTION | pos, rel, buttons |
MOUSEBUTTONUP | pos, button |
MOUSEBUTTONDOWN | pos, button |
JOYAXISMOTION | joy, axis, value |
JOYBALLMOTION | joy, ball, rel |
JOYHATMOTION | joy, hat, value |
JOYBUTTONUP | joy, button |
JOYBUTTONDOWN | joy, button |
VIDEORESIZE | size, w, h |
VIDEOEXPOSE | none |
USEREVENT | code |
Procesa internamente los manejadores de evento de pygame.
pygame.event.pump(): return None
Para cada cuadro de visualización de su juego necesitará hacer alguna clase de llamada a la cola de eventos. Esta función se asegura de que su programa puede interactuar internamente con el resto del sistema operativo. Debería utilizar esta función si no está usando otras funciones de eventos en su juego, esto permitirá que pygame pueda manejar acciones internas.
Esta función no se necesita si su programa procesa eventos de manera
consistente a través de otras funciones de pygame.event
.
Hay varias tareas importantes que se deben realizar internamente en la cola de eventos. La ventana principal podría necesitar responderle al sistema o ser redibujada. Si usted no consulta la cola de eventos por mucho tiempo, el sistema podría interpretar que su programa está inactivo o con un error.
Obtiene eventos de la cola.
pygame.event.get(): return Eventlist pygame.event.get(type): return Eventlist pygame.event.get(typelist): return Eventlist
Obtendrá todos los mensajes de eventos y los eliminará de la cola. Si se le especifica un tipo o secuencia de tipos de evento solo esos mensajes se eliminarán de la cola.
Si solo está interesado en eventos específicos de la cola, tenga cuidado que la cola podría llenarse eventualmente con eventos en los que no esté interesado.
Obtiene un solo evento de la cola.
pygame.event.poll(): return Event
Retorna un evento individual de la cola. Si la cola de eventos está vacía
se retornará un evento de tipo pygame.NOEVENT
inmediatamente. El evento
que se retorna se eliminará de la cola.
Espera por la llegada de un evento en la cola.
pygame.event.wait(): return Event
Retorna un evento individual de la cola. Esta función espera hasta que un evento llegue si es que la cola está vacía. El evento se elimina de la cola una vez que ha sido retornado. Mientras el programa está esperando el proceso dormirá en un estado de espera. Esto es importante para programas que quieres compartir los recursos de sistema con otras aplicaciones.
Consulta si un tipo de evento está esperando en la cola.
pygame.event.peek(type): return bool pygame.event.peek(typelist): return bool
Retorna True
si existe algunos de los eventos solicitados esperando
en la cola de eventos. Si se pasa una secuencia de tipos de eventos, se
retornará True
si alguno de esos eventos está en la cola.
Elimina todos los eventos de la cola.
pygame.event.clear(): return None pygame.event.clear(type): return None pygame.event.clear(typelist): return None
Elimina todos los eventos (o de un tipo específico) de la cola. Esta función
tiene el mismo efecto que pygame.event.get()
excepto que no retorna
nada. Puede ser ligeramente mas eficiente cuando limpia toda la cola
de eventos.
Obtiene el nombre de un identificador de evento.
pygame.event.event_name(type): return string
Pygame utiliza identificadores en números enteros para representar tipos de eventos. Si quiere reportar estos valores al usuario debería convertirlos a cadenas de texto. Esta función retornará el nombre para un tipo de evento. La cadena sigue el estilo PalabrasComoTitulo.
>>> pygame.event.event_name(1) 'ActiveEvent'
Controla que eventos se permiten en la cola.
pygame.event.set_blocked(type): return None pygame.event.set_blocked(typelist): return None pygame.event.set_blocked(None): return None
El tipo de evento especificado será excluido de poder aparecer en la cola de eventos. Por defecto todos los eventos podrá colocarse en la cola. Es seguro deshabilitar un tipo de evento muchas veces.
Si se pasa None como argumento, esto producirá el efecto contrario y se permitirán todos los tipos de eventos en la cola.
Controla que eventos se permitirán en la cola.
pygame.event.set_allowed(type): return None pygame.event.set_allowed(typelist): return None pygame.event.set_allowed(None): return None
El tipo indicado será incluido para aparecer en la cola de eventos. Por defecto todos los eventos pueden colocarse en la cola de eventos. Es seguro habilitar un tipo de evento varias veces.
Si se pasa None
como argumento, ninguno de los tipos de eventos
podrá estar en la cola de eventos.
Consulta si está bloqueado de la cola un tipo de evento.
pygame.event.get_blocked(type): return bool
Retorna True
si el tipo de evento dado ha sido bloqueado
de la cola de eventos.
Controla la posibilidad de compartir los dispositivos de entrada con otras aplicaciones.
pygame.event.set_grab(bool): return None
Cuando su programa corre en un entorno de ventana, este compartirá los
dispositivos de mouse y teclado con otras aplicaciones que estén
seleccionadas (con foco). Si su programa llama a set_grab(True)
, se
bloquearán todas las entras de dispositivos a su programa.
Es mejor no usar esta función siempre, dado que imposibilita al usuario de hacer otras cosas en su sistema.
Consulta si el programa está compartiendo los dispositivos en entrada.
pygame.event.get_grab(): return bool
Retorna True
cuando los eventos de entrada son exclusivos de esta
aplicación. Use pygame.event.set_grab()
para controlar este estado.
Coloca un nuevo evento en la cola.
pygame.event.post(Event): return None
Esta función coloca un nuevo evento al final de la cola de eventos. Estos eventos se recibirán mas tarde que los otros eventos ya en la cola.
Se usa frecuentemente para colocar eventos pygame.USEREVENT en la cola. Aunque se puede colocar cualquier tipo de evento, si utiliza tipos de eventos de sistema se asegurará de crear los atributos por defecto con los valores adecuados.