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:

class keymods

Constantes que representan las teclas modificadoras que pueden haber sido presionadas durante un evento on_key_up/on_key_down`.

LSHIFT
RSHIFT
SHIFT
LCTRL
RCTRL
CTRL
LALT
RALT
ALT
LMETA
RMETA
META
NUM
CAPS
MODE