Pygame – Gestión de eventos

Un evento es una acción que realiza el usuario para obtener el resultado deseado. Por ejemplo, si un usuario hace clic en un botón, se conoce como un evento de clic. Ahora, todos los eventos que realiza el usuario se insertan en una cola conocida como cola de eventos. Dado que es una cola, sigue la regla Primero en entrar, primero en salir, es decir, el elemento insertado primero saldrá primero. En este caso, cuando se crea un evento, se agrega al final de la cola y cuando se procesa el evento, sale del frente. Cada elemento en esta cola está asociado con un atributo que no es más que un número entero que representa qué tipo de evento es. Aprendamos algunos atributos importantes de los tipos de eventos comunes.

No Señor. Evento Atributos
1. TECLADO   llave, mod, unicode
2. TECLA ARRIBA clave, modo
3. BOTÓN DEL RATÓN  posición, botón
4. BOTÓN DEL RATÓN posición, botón
5. MOVIMIENTO DEL RATÓN  pos, rel, botones
6. ABANDONAR           –

Debido al hecho de que ha entendido lo que es un evento en pygame, profundicemos en este tema. Es fundamental saber que el procesamiento de un evento debe hacerse dentro de la función principal. Esto se debe a que, en caso de que se haga, existe la posibilidad de tener un retraso de entrada que puede resultar en una experiencia de usuario deficiente. El procesamiento se realiza mediante pygame.event.get(). Esta es una función que devolverá la lista de eventos que se pueden procesar uno tras otro. 

Tipos de eventos

1) Evento de teclado: 

Como se mencionó anteriormente, un evento es una acción realizada por el usuario. Entonces, preguntémonos, ¿qué acciones se pueden realizar en el teclado? La respuesta simple es presionar la tecla o soltarla. Presionar la tecla se conoce como KEYDOWN y soltarla se conoce como KEYUP. El atributo asociado a estos eventos se conoce como clave de tipo entero. Su uso es para representar la tecla del teclado. Las claves comunes están representadas por una constante entera predefinida que es una K mayúscula. Esta K va seguida de un guión bajo y luego se escribe el nombre de la clave. Por ejemplo K_s, K_F7.

El hecho es que las letras mayúsculas no tienen una constante entera. La solución a este problema es algo conocido como modificador, también conocido como mod, que es el modificador como shift, alt, ctrl, etc. que se presionan simultáneamente como tecla. El valor entero de mod se almacena en algo conocido como KMOD_ seguido del nombre de la clave. Por ejemplo KMOD_RSHIFT, KMOD_CTRL, etc. Repasemos los conceptos que hemos aprendido en el tema de eventos de teclado con la ayuda de un pequeño código.

Python3

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_w:
            print("Move the character forwards")
        elif event.key == pygame.K_s:
            print("Move the character backwards")
        elif event.key == pygame.K_a:
            print("Move the character left")
        elif event.key == pygame.K_d:
            print("Move the character right")

2) eventos de ratón

Comprendamos ahora los diferentes tipos de eventos del mouse. Los primeros dos son MOUSEBUTTONDOWN y MOUSEBUTTONUP que son similares a KEYDOWN y KEYUP excepto por el hecho de que aquí estamos usando un mouse. Además de ellos, existe otro evento del ratón conocido como MOUSEMOTION. Comprendamos los 3 eventos del mouse en detalle .

i) MOUSEBUTTONDOWN: El evento MOUSEBUTTONDOWN ocurre cuando el usuario presiona el botón del mouse. Tiene un par de atributos que son los siguientes: 

  • botón:  Es un número entero que representa el botón que se ha presionado. El botón izquierdo del mouse está representado por 1, para la rueda del mouse, el número entero es 2 y el número entero 3 es cuando se presiona el botón derecho del mouse.
  • pos: Es la posición absoluta del mouse (x, y) cuando el usuario presiona el botón del mouse. 

ii) MOUSEBUTTONUP: El evento MOUSEBUTTONUP ocurre cuando el usuario suelta el botón del mouse. Tiene los mismos atributos button y pos que MOUSEBUTTONDOWN que se han mencionado anteriormente.

iii) MOUSEMOTION: Este evento ocurre cuando el usuario mueve su mouse en la ventana de visualización. Tiene los atributos botones, pos y rel.

  • botones: Es una tupla que representa si los botones del mouse (izquierdo, rueda del mouse, derecho) están presionados o no.
  • pos: Es la posición absoluta (x, y) del cursor en píxeles.
  • rel: Representa la posición relativa a la posición anterior (rel_x, rel_y) en píxeles.

Revisemos los valores para cada atributo del botón del mouse con la ayuda de la siguiente tabla:

No Señor. Botón Valor
1. Boton izquierdo del raton  1
2. Botón de la rueda del ratón 2
3. Botón derecho del mouse  3
4. Desplazarse hacia arriba con la rueda del ratón 4
5. Desplazamiento de la rueda del mouse hacia abajo 5

Repasemos los conceptos que hemos aprendido en el tema del evento del ratón con la ayuda de un pequeño código. 

Python3

for event in pygame. event.get():
    if event.type == pygame.QUIT:
        raise SystemExit
    elif event.type == pygame.MOUSEMOTION:
        if event.rel[0] > 0:
            print("Mouse moving to the right")
        elif event.rel[1] > 0:
            print("Mouse moving down")
    elif event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 3:
            print("Right mouse button pressed")
    elif event.type == pygame.MOUSEBUTTONUP:
        print("Mouse button has been released")

Veamos ahora un par de programas Pygame relacionados con el manejo de eventos.

Ejemplo 1:

 El siguiente programa verificará si hemos presionado la tecla izquierda o la tecla derecha y mostrará la salida en consecuencia.

Python3

import pygame
pygame.init()
  
# Creating window
gameWindow = pygame.display.set_mode((800, 300))
pygame.display.set_caption("Event Handling")
  
  
exit_game = False
game_over = False
  
# Creating a game loop
while not exit_game:
    for event in pygame.event.get():  # For Loop
        if event.type == pygame.QUIT:
            exit_game = True
  
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                print("You have pressed right arrow key")
            elif event.key == pygame.K_LEFT:
                print("You have pressed left arrow key")
  
pygame.quit()
quit()

Producción:

Ejemplo 2:

El siguiente programa verificará si estamos moviendo el mouse o presionando el botón del mouse o soltándolo y mostrará la salida en consecuencia.

Python3

import pygame
pygame.init()
  
# Creating window
gameWindow = pygame.display.set_mode((800, 300))
pygame.display.set_caption("Event Handling")
  
  
exit_game = False
game_over = False
  
# Creating a game loop
while not exit_game:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit_game = True
  
        if event.type == pygame.QUIT:
            raise SystemExit
        elif event.type == pygame.MOUSEMOTION:
            if event.rel[0] > 0:
                print("Mouse moving to the right")
            elif event.rel[1] > 0:
                print("Mouse moving down")
        elif event.type == pygame.MOUSEBUTTONDOWN:  # Click event
            if event.button == 3:
                print("Right mouse button pressed")
        elif event.type == pygame.MOUSEBUTTONUP:  # Mouse released
            print("Mouse button has been released")
  
pygame.quit()
quit()

Producción:

Publicación traducida automáticamente

Artículo escrito por shreyasnaphad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *