Ganchos para eventos¶
Pygame Zero recogerá y llamará automáticamente los ganchos de eventos que definas. Este enfoque te ahorra tener que implementar la maquinaria del bucle de eventos tú mismo.
Ganchos de bucle de juego¶
Un típico bucle de juego se parece un poco a esto:
while game_has_not_ended():
process_input()
update()
draw()
El procesamiento de la entrada es un poco más complicado, pero Pygame Zero te permite
definir fácilmente las funciones update()
y draw()
dentro de tu módulo de
módulo.
-
draw
()¶ Llamada por Pygame Zero cuando necesita redibujar la ventana del juego.
draw()
no debe recibir argumentos.Pygame Zero intenta averiguar cuando la pantalla del juego necesita ser redibujada para evitar redibujarla si nada ha cambiado. En cada paso del bucle del juego dibujará la pantalla en las siguientes situaciones:
Si has definido una función
update()
(ver más abajo).Si se dispara un evento de reloj.
Si se dispara un evento de entrada.
Una de las formas en que esto puede atraparte es si intentas modificar o animar algo dentro de la función de dibujo. Por ejemplo, este código es incorrecto: el alienígena no está garantizado para continuar moviéndose a través de la pantalla:
def draw(): alien.left += 1 alien.draw()
El código correcto utiliza
update()
para modificar o animar cosas y draw simplemente para pintar la pantalla:def draw(): alien.draw() def update(): alien.left += 1
-
update
() o update(dt)¶ Llamada por Pygame Zero para escalar su lógica de juego. Esto será llamado repetidamente, 60 veces por segundo.
Hay dos enfoques diferentes para escribir una función de actualización.
En juegos sencillos puedes asumir que un pequeño paso de tiempo (una fracción de segundo) entre cada llamada a
update()
. Quizás ni siquiera te importe lo grande que sea ese paso de tiempo: puedes simplemente mover los objetos en un número fijo de píxeles por fotograma (o acelerarlos en una constante fija, etc.)Un enfoque más avanzado es basar tus cálculos de movimiento y física en la cantidad de tiempo real que ha transcurrido entre las llamadas. Esto puede dar una animación más suave, pero los cálculos involucrados pueden ser más difíciles y usted debe tener más cuidado para evitar un comportamiento impredecible cuando los pasos de tiempo se hacen más grandes.
Para utilizar un enfoque basado en el tiempo, puede cambiar la función de actualización para tomar un solo parámetro. Si tu función de actualización toma un argumento, Pygame Zero le pasará el tiempo transcurrido en segundos. Puedes usar esto para escalar tus cálculos de movimiento.
Ganchos para el manejo de eventos¶
De forma similar a los ganchos del bucle del juego, tu programa Pygame Zero puede responder a eventos de entrada definiendo funciones con nombres específicos.
Al igual que en el caso de update()
, Pygame Zero inspeccionará tus funciones manejadoras de eventos para determinar cómo llamarlas. Así que no es necesario hacer que tus funciones manejadoras tomen argumentos. Por ejemplo, Pygame Zero estará feliz de llamar a cualquiera de estas variaciones de una función on_mouse_down
:
def on_mouse_down():
print("Botón del ratón pulsado")
def on_mouse_down(pos):
print("Botón del ratón pulsado en", pos)
def on_mouse_down(button):
print("Botón del ratón", button, "pulsado")
def on_mouse_down(pos, button):
print("Botón del ratón", button, "pulsado en", pos)
Lo hace mirando los nombres de los parámetros, por lo que deben estar escritos exactamente como arriba. Cada gancho de evento tiene un conjunto diferente de parámetros que puede utilizar, como se describe a continuación.
-
on_mouse_down
([pos][, button])¶ Se llama cuando se presiona un botón del ratón.
- Parámetros
pos – Una tupla (x, y) que da la ubicación del puntero del ratón cuando el botón fue presionado.
button – Un valor del enum
mouse
que indica el botón que fue pulsado.
-
on_mouse_up
([pos][, button])¶ Llamada cuando se suelta un botón del ratón.
- Parámetros
pos – Una tupla (x, y) que da la ubicación del puntero del ratón cuando se suelta el botón.
button – Un valor de la clase
mouse
enum que indica el botón que fue liberado.
-
on_mouse_move
([pos][, rel][, buttons])¶ Llamada cuando se mueve el ratón.
- Parámetros
pos – Una tupla (x, y) que da la ubicación a la que el puntero del ratón se ha movido.
rel – Una tupla (delta_x, delta_y) que representa el cambio en la posición del puntero del ratón.
buttons – Un conjunto de valores del enum
mouse
que indican los botones que fueron presionados durante el movimiento.
Para manejar el arrastre del ratón, utilice código como el siguiente:
def on_mouse_move(rel, buttons):
if mouse.LEFT in buttons:
# el ratón fue arrastrado, haz algo con `rel`.
...
-
on_key_down
([key][, mod][, unicode])¶ Se llama cuando se presiona una tecla.
- Parámetros
key – Un entero que indica la tecla que se ha pulsado (ver abajo).
unicode – Cuando sea relevante, el carácter que se escribió. No todas las teclas resultarán en caracteres imprimibles - muchos pueden ser caracteres de control de control. En el caso de que una tecla no se corresponda con un carácter Unicode, será la cadena vacía.
mod – Una máscara de bits de las teclas modificadoras que fueron presionadas.
-
on_key_up
([key][, mod])¶ Se llama cuando se suelta una tecla.
- Parámetros
key – Un entero que indica la tecla que fue liberada (ver abajo).
mod – Una máscara de bits de las teclas modificadoras que fueron presionadas.
-
on_music_end
()¶ Llamada cuando una pista musical termina.
Tenga en cuenta que esto no será llamado si la pista está configurada para hacer un bucle.
Botones y teclas¶
Los objetos incorporados mouse
y keys
pueden ser utilizados para determinar qué botones
o teclas fueron presionados en los eventos anteriores.
Tenga en cuenta que los eventos de rueda de desplazamiento del ratón aparecen como pulsaciones de botón con el siguiente
WHEEL_UP
/WHEEL_DOWN` constantes de botón.
-
class
mouse
¶ Una enumeración incorporada de botones que pueden ser recibidos por los manejadores
on_mouse_*
.-
LEFT
¶
-
MIDDLE
¶
-
RIGHT
¶
-
WHEEL_UP
¶
-
WHEEL_DOWN
¶
-
-
class
keys
¶ Una enumeración incorporada de claves que pueden ser recibidas por los manejadores
on_key_*
.-
BACKSPACE
¶
-
TAB
¶
-
CLEAR
¶
-
RETURN
¶
-
PAUSE
¶
-
ESCAPE
¶
-
SPACE
¶
-
EXCLAIM
¶
-
QUOTEDBL
¶
-
HASH
¶
-
DOLLAR
¶
-
AMPERSAND
¶
-
QUOTE
¶
-
LEFTPAREN
¶
-
RIGHTPAREN
¶
-
ASTERISK
¶
-
PLUS
¶
-
COMMA
¶
-
MINUS
¶
-
PERIOD
¶
-
SLASH
¶
-
K_0
¶
-
K_1
¶
-
K_2
¶
-
K_3
¶
-
K_4
¶
-
K_5
¶
-
K_6
¶
-
K_7
¶
-
K_8
¶
-
K_9
¶
-
COLON
¶
-
SEMICOLON
¶
-
LESS
¶
-
EQUALS
¶
-
GREATER
¶
-
QUESTION
¶
-
AT
¶
-
LEFTBRACKET
¶
-
BACKSLASH
¶
-
RIGHTBRACKET
¶
-
CARET
¶
-
UNDERSCORE
¶
-
BACKQUOTE
¶
-
A
¶
-
B
¶
-
C
¶
-
D
¶
-
E
¶
-
F
¶
-
G
¶
-
H
¶
-
I
¶
-
J
¶
-
K
¶
-
L
¶
-
M
¶
-
N
¶
-
O
¶
-
P
¶
-
Q
¶
-
R
¶
-
S
¶
-
T
¶
-
U
¶
-
V
¶
-
W
¶
-
X
¶
-
Y
¶
-
Z
¶
-
DELETE
¶
-
KP0
¶
-
KP1
¶
-
KP2
¶
-
KP3
¶
-
KP4
¶
-
KP5
¶
-
KP6
¶
-
KP7
¶
-
KP8
¶
-
KP9
¶
-
KP_PERIOD
¶
-
KP_DIVIDE
¶
-
KP_MULTIPLY
¶
-
KP_MINUS
¶
-
KP_PLUS
¶
-
KP_ENTER
¶
-
KP_EQUALS
¶
-
UP
¶
-
DOWN
¶
-
RIGHT
¶
-
LEFT
¶
-
INSERT
¶
-
HOME
¶
-
END
¶
-
PAGEUP
¶
-
PAGEDOWN
¶
-
F1
¶
-
F2
¶
-
F3
¶
-
F4
¶
-
F5
¶
-
F6
¶
-
F7
¶
-
F8
¶
-
F9
¶
-
F10
¶
-
F11
¶
-
F12
¶
-
F13
¶
-
F14
¶
-
F15
¶
-
NUMLOCK
¶
-
CAPSLOCK
¶
-
SCROLLOCK
¶
-
RSHIFT
¶
-
LSHIFT
¶
-
RCTRL
¶
-
LCTRL
¶
-
RALT
¶
-
LALT
¶
-
RMETA
¶
-
LMETA
¶
-
LSUPER
¶
-
RSUPER
¶
-
MODE
¶
-
HELP
¶
-
PRINT
¶
-
SYSREQ
¶
-
BREAK
¶
-
MENU
¶
-
POWER
¶
-
EURO
¶
-
LAST
¶
-
Además, puede acceder a un conjunto de constantes que representan claves modificadoras: