Saltar la navegación

4.2. Control por ratón

¿Cómo capturar el movimiento del ratón?

En Pygame, es posible detectar las coordenadas del ratón dentro de la ventana del juego para interactuar con los elementos en pantalla. Las coordenadas del ratón pueden ser útiles para crear juegos en los que el jugador controle el movimiento de un objeto o interactúe con la interfaz.

Para obtener las coordenadas actuales del ratón, se utiliza la función pygame.mouse.get_pos(), que devuelve una tupla con las coordenadas (x, y) del ratón dentro de la ventana.

El siguiente ejemplo muestra cómo capturar las coordenadas del ratón en tiempo real:

import pygame

# Inicialización de Pygame
pygame.init()

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

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

    # Captura las coordenadas del ratón
    mouse_pos = pygame.mouse.get_pos()

    # Limpia la pantalla y muestra las coordenadas del ratón
    screen.fill((0, 0, 0))  # Fondo negro
    font = pygame.font.Font(None, 36)
    text = font.render(f"Coordenadas del ratón: {mouse_pos}", True, (255, 255, 255))
    screen.blit(text, (20, 20))  # Muestra las coordenadas en la parte superior izquierda
    pygame.display.flip()  # Actualiza la pantalla

    pygame.time.delay(30)

pygame.quit()

En este ejemplo, el programa captura continuamente las coordenadas del ratón y las muestra en la pantalla. Esto permite que el juego responda a la posición del ratón en tiempo real.

¿Cómo capturar el clic del ratón?

En Pygame, es posible detectar cuándo el usuario hace clic con el ratón y qué botón ha presionado (izquierdo, derecho o medio). Esto se hace utilizando los eventos de clic del ratón, específicamente pygame.MOUSEBUTTONDOWN y pygame.MOUSEBUTTONUP, que indican cuándo se presiona y se suelta un botón del ratón, respectivamente.

Los botones del ratón tienen valores específicos en Pygame:

  • Botón izquierdo: 1
  • Botón medio: 2
  • Botón derecho: 3

A continuación se muestra un ejemplo de cómo detectar clics del ratón y qué botón ha sido presionado:

import pygame

# Inicialización de Pygame
pygame.init()

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

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

        # Detecta si se presionó un botón del ratón
        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                print("Botón izquierdo del ratón presionado")
            elif event.button == 2:
                print("Botón medio del ratón presionado")
            elif event.button == 3:
                print("Botón derecho del ratón presionado")

    # Dibuja la pantalla (fondo negro)
    screen.fill((0, 0, 0))
    pygame.display.flip()

    pygame.time.delay(30)

pygame.quit()

En este ejemplo, el programa detecta cuando el usuario hace clic con el ratón y, dependiendo de qué botón se presione, imprime un mensaje en la consola. El botón izquierdo es el más común para seleccionar o interactuar, mientras que el derecho y el medio pueden asignarse para otras funcionalidades.

Ejemplo de uso del ratón para controlar objetos

En Pygame, se pueden crear objetos que respondan a los movimientos o clics del ratón, lo que permite una interacción más dinámica en el juego. En este ejemplo, aprenderás a crear un objeto que siga al ratón o que reaccione cuando el usuario haga clic sobre él.

1. Objeto que sigue al ratón

Es posible hacer que un objeto en la pantalla siga la posición del ratón usando la función pygame.mouse.get_pos() para obtener las coordenadas actuales del ratón y actualizar la posición del objeto en cada fotograma.

import pygame

# Inicialización de Pygame
pygame.init()

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

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

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

    # Dibuja la pantalla y el objeto que sigue al ratón
    screen.fill((0, 0, 0))  # Fondo negro
    pygame.draw.circle(screen, (255, 0, 0), mouse_pos, 25)  # Circulo rojo que sigue al ratón
    pygame.display.flip()  # Actualiza la pantalla

    pygame.time.delay(30)

pygame.quit()

En este ejemplo, se dibuja un círculo rojo que sigue las coordenadas del ratón, creando un efecto de "seguimiento" del cursor.

2. Objeto que reacciona a un clic

También es posible crear un objeto que reaccione cuando el usuario hace clic sobre él. Esto se logra capturando las coordenadas del ratón y verificando si están dentro de los límites del objeto al momento de hacer clic.

import pygame

# Inicialización de Pygame
pygame.init()

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

# Posición y tamaño del objeto
rect_x, rect_y = 350, 250
rect_width, rect_height = 100, 100

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

        # Detecta si se hizo clic con el ratón
        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse_pos = pygame.mouse.get_pos()
            # Verifica si el clic fue dentro del objeto
            if rect_x < mouse_pos[0] < rect_x + rect_width and rect_y < mouse_pos[1] < rect_y + rect_height:
                print("¡Objeto clicado!")

    # Dibuja la pantalla y el objeto
    screen.fill((0, 0, 0))  # Fondo negro
    pygame.draw.rect(screen, (0, 255, 0), (rect_x, rect_y, rect_width, rect_height))  # Rectángulo verde
    pygame.display.flip()  # Actualiza la pantalla

    pygame.time.delay(30)

pygame.quit()

En este segundo ejemplo, se dibuja un rectángulo verde en la pantalla. Si el usuario hace clic dentro de los límites del rectángulo, el programa imprime un mensaje en la consola.

Con estos ejemplos, puedes implementar interacciones simples con el ratón, ya sea para que el objeto siga el movimiento del cursor o para reaccionar a los clics del usuario, creando una experiencia de juego más interactiva.

Minijuego con el ratón

Supón que quieres hacer un mini-juego donde uses el ratón para mover un puntero con el que disparar a blancos. Sería una oportunidad muy buena para usar lo aprendido en esta unidad.

Objetivo: Escribir un programa en Pygame donde un objeto (un círculo) siga el movimiento del ratón, y otro objeto (un rectángulo) cambie de color cuando el usuario haga clic sobre él.

  1. Crea una ventana de juego de 800 píxeles de ancho y 600 píxeles de alto.
  2. Dibuja un círculo que siga las coordenadas del ratón mientras se mueve.
  3. Dibuja un rectángulo en la pantalla que cambie de color cada vez que el usuario haga clic sobre él.
  4. Asegúrate de que el rectángulo permanezca dentro de la ventana del juego.
  5. El juego debe funcionar en un bucle hasta que el usuario cierre la ventana.

Corrige el código

Código de Pygame con Errores


import pygame

# Inicialización de Pygame
pygame.init()

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

# Posición y tamaño del rectángulo
rect_x, rect_y = 350, 250
rect_width, rect_height = 100, 100
rect_color = (0, 255, 0)  # Color inicial (verde)

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

        # Detecta si se hizo clic con el ratón
        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse_pos = pygame.mouse.get_pos()
            # Verifica si el clic fue dentro del rectángulo
            if rect_x <= mouse_pos[0] <= rect_x + rect_width and rect_y <= mouse_pos[1] <= rect_y + rect_height:
                # Cambia el color del rectángulo al hacer clic
                rect_color = (255, 0, 0) if rect_color == (0, 255, 0) else (0, 255, 0)

    # Captura la posición del ratón para el círculo
    mouse_pos = pygame.mouse.get_post()

    # 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, rect_color, (rect_x, rect_y, rect_width, rect_height))  # Rectángulo
    pygame.display.flip()  # Actualiza la pantalla

    pygame.time.delay(30)

pygame.quit()

Según el análisis previo, hay cuatro errores:

  1. Error en la comparación de las coordenadas del ratón y los límites del rectángulo.
  2. Error tipográfico en la función pygame.mouse.get_post()
  3. Error en el color del círculo
  4. Falta de control para mantener el rectángulo dentro de los límites de la ventana

Licencia: licencia propietaria intelectual

Creado con eXeLearning (Ventana nueva)