¿Cómo agregar eventos personalizados en Pygame?

En este artículo veremos cómo agregar eventos personalizados en PyGame

Instalación

La biblioteca PyGame se puede instalar usando el siguiente comando:

pip install pygame

Aunque PyGame viene con un conjunto de eventos (Ej: KEYDOWN y KEYUP), nos permite crear nuestros propios eventos personalizados adicionales según los requisitos de nuestro juego. Los eventos personalizados aumentan el control y la flexibilidad que tenemos sobre nuestro juego. Un evento personalizado es lo mismo que crear un evento definido por el usuario.

Sintaxis:

<nombre_de_evento> = pygame.USEREVENT + 1

Ejemplo:

# Aquí SUMA y RESTA es el nombre del evento

ADICIÓN = pygame.USEREVENT + 1 

RESTA = pygame.USEREVENT + 2

Ahora bien, ¿cómo publicamos nuestros eventos personalizados una vez creados? Esto se puede hacer de dos formas:

  • Usando el método pygame.event.post() .
  • Usando el método pygame.time.set_timer() .

Usando el método pygame.event.post()

Podemos publicar directamente nuestros eventos usando el método pygame.event.post() . Este método agrega nuestro evento al final de los eventos en la cola. Para ejecutar esto, necesitamos convertir nuestro evento al tipo de evento de Pygame para que coincida con los atributos del método de publicación y evitar errores.

Sintaxis:

# Paso 1: convertir el evento en un tipo de datos de evento de pygame 

ADD_event = pygame.event.Event(evento)

# Paso 2 – Publicar el evento

pygame.event.post(ADD_event) # event_name como parámetro

Usando el método pygame.time.set_timer()

Transmitir el evento periódicamente mediante el uso de temporizadores de PyGame. Aquí, usaremos otro método para publicar el evento usando la función set_timer() , que toma dos parámetros, un nombre de evento de usuario y un intervalo de tiempo en milisegundos.

Sintaxis:

# event_name, tiempo en ms

pygame.time.set_timer(evento, duración)   

Nota: En esto, no necesitamos convertir el evento definido por el usuario en el tipo de datos del evento PyGame.

Ahora, para crear una trama con eventos personalizados, en primer lugar, los atributos de la pantalla deben configurarse según los requisitos. Luego cree un evento y conviértalo al tipo de datos de evento PyGame. Ahora agregue código para sus operaciones que generará un evento personalizado.

En la implementación dada se han manejado ambos enfoques.

Programa : 

Python3

# Python program to add Custom Events
import pygame
  
  
pygame.init()
  
# Setting up the screen and timer
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()
  
# set title
pygame.display.set_caption('Custom Events')
  
# defining colours
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
  
# Keep a track of active variable
bg_active_color = WHITE
screen.fill(WHITE)
  
# custom user event to change color
CHANGE_COLOR = pygame.USEREVENT + 1
  
# custom user event to inflate defalte
# box
ON_BOX = pygame.USEREVENT + 2
  
# creating Rectangle
box = pygame.Rect((225, 225, 50, 50))
grow = True
  
# posting a event to switch color after 
# every 500ms
pygame.time.set_timer(CHANGE_COLOR, 500)
  
running = True
while running:
    
    # checks which all events are posted
    # and based on that perform required
    # operations
    for event in pygame.event.get():
        
        # switching colours after every
        # 500ms
        if event.type == CHANGE_COLOR:
            if bg_active_color == GREEN:
                screen.fill(GREEN)
                bg_active_color = WHITE
            elif bg_active_color == WHITE:
                screen.fill(WHITE)
                bg_active_color = GREEN
  
        if event.type == ON_BOX:
            
            # to inflate and deflate box
            if grow:
                box.inflate_ip(3, 3)
                grow = box.width < 75
            else:
                box.inflate_ip(-3, -3)
                grow = box.width < 50
  
        if event.type == pygame.QUIT:
            
            # for quitting the program
            running = False
  
    # Posting event when the cursor is on top 
    # of the box
    if box.collidepoint(pygame.mouse.get_pos()):
        pygame.event.post(pygame.event.Event(ON_BOX))
  
    # Drawing rectangle on the screen
    pygame.draw.rect(screen, RED, box)
  
    # Updating Screen
    pygame.display.update()
      
    # Setting Frames per Second
    timer.tick(30)
  
pygame.quit()

Producción : 

En la implementación anterior, hemos utilizado el método .post() para inflar/desinflar el cuadro cuando el cursor está en la parte superior del cuadro y el método .set_timer() para cambiar el color de fondo cada 500 ms.  

Publicación traducida automáticamente

Artículo escrito por iamakkkhil 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 *