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