Saltar la navegación

4.3. Combos y más

Eventos continuos

En Pygame, además de detectar cuándo una tecla se presiona o se suelta con los eventos KEYDOWN y KEYUP, también es posible detectar si una tecla se mantiene presionada durante un periodo de tiempo utilizando pygame.key.get_pressed(). Esta función es especialmente útil para implementar controles continuos, como el movimiento de un personaje que siga moviéndose mientras el jugador mantenga una tecla presionada.

pygame.key.get_pressed() devuelve una lista con el estado de todas las teclas del teclado, donde cada índice de la lista corresponde a una tecla, y su valor es True si la tecla está presionada, o False si no lo está.

Un ejemplo típico sería el movimiento continuo de un personaje mientras se presiona una tecla. Por ejemplo, si el jugador mantiene presionada la tecla de flecha izquierda, el personaje seguirá moviéndose hacia la izquierda hasta que la tecla se suelte.

En este ejemplo, el personaje se mueve de forma continua en la dirección de la tecla que se mantiene presionada. Si el usuario presiona y mantiene la tecla de flecha izquierda, el personaje se moverá hacia la izquierda. El mismo principio se aplica para las demás teclas de dirección.

import pygame

# Inicialización de Pygame
pygame.init()

# Dimensiones de la ventana
screen = pygame.display.set_mode((800, 600))

# Posición inicial del personaje
x, y = 400, 300
velocidad = 5

# Bucle principal del juego
running = True
while running:
    # Captura de eventos
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Captura del estado del teclado
    keys = pygame.key.get_pressed()

    # Movimiento continuo del personaje
    if keys[pygame.K_LEFT]:
        x -= velocidad
    if keys[pygame.K_RIGHT]:
        x += velocidad
    if keys[pygame.K_UP]:
        y -= velocidad
    if keys[pygame.K_DOWN]:
        y += velocidad

    # Dibuja la pantalla y el personaje
    screen.fill((0, 0, 0))  # Fondo negro
    pygame.draw.rect(screen, (0, 255, 0), (x, y, 50, 50))  # Personaje como un cuadrado verde
    pygame.display.flip()  # Actualiza la pantalla

    pygame.time.delay(30)  # Pausa para controlar la velocidad del juego

pygame.quit()

Combo de ratón y teclado

En Pygame, es posible capturar las entradas tanto del teclado como del ratón simultáneamente para permitir una interacción más rica en los juegos. Esto es útil, por ejemplo, para mover un personaje con el teclado mientras se utiliza el ratón para apuntar o interactuar con objetos en pantalla.

Para manejar ambos tipos de entrada a la vez, se pueden utilizar funciones como pygame.key.get_pressed() para detectar las teclas presionadas y pygame.mouse.get_pos() o pygame.mouse.get_pressed() para capturar la posición del ratón o sus clics. Ambos tipos de controles se pueden gestionar dentro del mismo bucle de eventos del juego.

Ejemplo de uso combinado

El siguiente código muestra cómo capturar entradas del teclado para mover un personaje y, al mismo tiempo, seguir la posición del ratón con un círculo:

import pygame

# Inicialización de Pygame
pygame.init()

# Dimensiones de la ventana
screen = pygame.display.set_mode((800, 600))

# Posición inicial del personaje
x, y = 400, 300
velocidad = 5

# Bucle principal del juego
running = True
while running:
    # Captura de eventos
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Captura del estado del teclado
    keys = pygame.key.get_pressed()

    # Movimiento del personaje con el teclado
    if keys[pygame.K_LEFT]:
        x -= velocidad
    if keys[pygame.K_RIGHT]:
        x += velocidad
    if keys[pygame.K_UP]:
        y -= velocidad
    if keys[pygame.K_DOWN]:
        y += velocidad

    # Captura de la posición del ratón
    mouse_pos = pygame.mouse.get_pos()

    # Dibuja la pantalla
    screen.fill((0, 0, 0))  # Fondo negro
    pygame.draw.circle(screen, (255, 255, 0), mouse_pos, 25)  # Círculo que sigue al ratón
    pygame.draw.rect(screen, (0, 255, 0), (x, y, 50, 50))  # Personaje como un cuadrado verde
    pygame.display.flip()  # Actualiza la pantalla

    pygame.time.delay(30)  # Controla la velocidad del juego

pygame.quit()

En este ejemplo, el personaje (un cuadrado verde) se mueve con las teclas de dirección, mientras que el círculo amarillo sigue la posición del ratón en la pantalla.

  • Para una mejor experiencia de juego, es importante que el control del teclado y el ratón no se bloqueen entre sí. Ambos deben ser verificados en cada ciclo del bucle principal.
  • Es posible combinar eventos específicos del ratón (como clics) con movimientos del teclado para crear interacciones más complejas, como seleccionar objetos con el ratón mientras se mueve un personaje con el teclado.

Licencia: licencia propietaria intelectual

Creado con eXeLearning (Ventana nueva)