En este artículo, vamos a ver cómo configurar el cursor del mouse desde un mapa de bits usando el módulo PyGame en Python.
¿Qué es PyGame?
- Es un conjunto multiplataforma de módulos Python diseñados para escribir videojuegos.
- Incluye gráficos por computadora y bibliotecas de sonido diseñadas para usarse con el lenguaje de programación Python.
- Puede manejar tiempo, video, música, fuentes, diferentes formatos de imagen, cursores, mouse, teclado, joysticks, etc.
¿Qué es el mapa de bits?
- Un mapa de bits es una array de datos binarios que representan los valores de los píxeles de una imagen.
- Un GIF es un ejemplo de un archivo de imagen de gráficos que tiene un mapa de bits.
Función del ratón en PyGame
Se utiliza en juegos donde el programa necesita mantenerse actualizado con respecto a la posición del cursor.
pygame.mouse.get_pressed()
Devuelve la secuencia de booleanos que representan el estado de todos los botones del ratón. Un valor verdadero significa que el mouse se está presionando actualmente en el momento de la llamada.
Sintaxis: pygame.mouse.get_pressed(num_buttons=3) -> (boton1, boton2, boton3)
Parámetro:
- num_buttons : Número de botones en el mouse (valor predeterminado = 3).
Esta función se utiliza para crear una superficie de visualización. Los argumentos pasados son requests de un tipo de visualización. La visualización real creada será la mejor coincidencia posible admitida por el sistema.
Sintaxis :
Parámetro:
- Resolución: un par de números que representan el ancho y el alto de la ventana.
- Flags: Opciones adicionales que cambian el tipo de ventana.
- Profundidad: cantidad de bits utilizados para el color.
pygame.mouse.get_pos()
Esto se usa para obtener las coordenadas X e Y del cursor del mouse. Estas coordenadas son relativas a la esquina superior izquierda de la pantalla. La posición del cursor es relativa.
Sintaxis : pygame.mouse.get_pos()
Retorno: Se almacenan las coordenadas del ratón.
pygame.quit()
Esto se utiliza para cerrar el juego.
Sintaxis : pygame.quit()
reloj.tick()
Al llamar a clock.tick(60) una vez por cuadro, el programa nunca se ejecutará a más de 60 cuadros por segundo.
Sintaxis : clock.tick(velocidad de fotogramas=0)
Parámetro:
- Framerate: calculará cuántos milisegundos han pasado desde la llamada anterior.
Ejemplo 1: crear el archivo main.py para crear un círculo en la ruta del mouse.
En este ejemplo, vamos a dibujar un círculo en la pantalla dondequiera que se mueva el cursor dentro de la ventana, y para implementar esto tenemos que seguir los siguientes pasos:
- Estaremos haciendo un lienzo de tamaño 960*600.
- Escribiendo código para hacer nuestro círculo.
- Mantenga un registro del cursor del mouse dentro del lienzo.
- Dibujar círculos en los lugares donde se mueve el cursor.
Python3
import pygame # initializing the pygame pygame.init() # displaying Canvas (960*600) screen = pygame.display.set_mode((960, 600)) pygame.display.set_caption('GeeksForGeeks') clock = pygame.time.Clock() loop = True while loop: for event in pygame.event.get(): if event.type == pygame.QUIT: loop = False pos = pygame.mouse.get_pos() # giving color and shape to the circle pygame.draw.circle(screen, (0, 255, 0), pos, 15, 1) pygame.display.update() clock.tick(60) pygame.quit() # quit()
Producción:
Ejemplo 2: Creación del archivo main.py para ubicar la dirección del cursor.
En este ejemplo, vamos a dibujar una flecha en el centro de la ventana y esta flecha apunta hacia el cursor dondequiera que el cursor se mueva dentro de la ventana del lienzo para implementar esto, debemos seguir los siguientes pasos:
- Estaremos haciendo un lienzo de tamaño 640*480.
- Ahora escriba un código para dibujar una flecha que apunte hacia el puntero del mouse.
- Ahora haz un programa para rotar la flecha hacia el cursor.
Python3
import pygame as pg from pygame.math import Vector2 class Player(pg.sprite.Sprite): # main function starts here def __init__(self, pos): super().__init__() self.image = pg.Surface((50, 30), pg.SRCALPHA) pg.draw.polygon(self.image, pg.Color('steelblue2'), [(0, 0), (50, 15), (0, 30)]) self.orig_image = self.image # Store a reference to the original. self.rect = self.image.get_rect(center=pos) self.pos = Vector2(pos) def update(self): self.rotate() # Rotate the arrow function def rotate(self): # The vector to the target (the mouse position). direction = pg.mouse.get_pos() - self.pos # .as_polar gives you the polar # coordinates of the vector, # i.e. the radius (distance to the target) # and the angle. radius, angle = direction.as_polar() # Rotate the image by the negative angle # (y-axis in pygame is flipped). self.image = pg.transform.rotate(self.orig_image, -angle) # Create a new rect with the # center of the old rect. self.rect = self.image.get_rect(center=self.rect.center) pg.init() # Creating a canvas of size 640*480 screen = pg.display.set_mode((640, 480)) clock = pg.time.Clock() all_sprites = pg.sprite.Group(Player((300, 220))) done = False while not done: for event in pg.event.get(): if event.type == pg.QUIT: done = True all_sprites.update() screen.fill((30, 30, 30)) all_sprites.draw(screen) pg.display.flip() clock.tick(30)
Producción:
Ejemplo 3: cambiar la forma del cursor del ratón
En este ejemplo, vamos a cambiar la forma del cursor cada vez que hacemos clic con el mouse, si el cursor está dentro de la ventana de la pantalla, para implementar esto, debemos seguir los siguientes pasos:
- Primero, haremos un lienzo de 600*400.
- Blanco un código para rastrear el cursor del ratón.
- Ahora escribiremos un código para cambiar la forma del Cursor si se hace clic con el mouse.
Python3
import pygame pygame.init() # Creating a canvas of 600*400 screen = pygame.display.set_mode((600, 400)) clock = pygame.time.Clock() # old type, "bitmap" cursor cursor1 = pygame.cursors.diamond # new type, "system" cursor cursor2 = pygame.SYSTEM_CURSOR_HAND # new type, "color" cursor surf = pygame.Surface((30, 25), pygame.SRCALPHA) pygame.draw.rect(surf, (0, 255, 0), [0, 0, 10, 10]) pygame.draw.rect(surf, (0, 255, 0), [20, 0, 10, 10]) pygame.draw.rect(surf, (255, 0, 0), [5, 5, 20, 20]) cursor3 = pygame.cursors.Cursor((15, 5), surf) cursors = [cursor1, cursor2, cursor3] cursor_index = 0 # the arguments to set_cursor can be a Cursor object # or it will construct a Cursor object # internally from the arguments pygame.mouse.set_cursor(cursors[cursor_index]) while True: screen.fill("purple") for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONDOWN: cursor_index += 1 cursor_index %= len(cursors) pygame.mouse.set_cursor(cursors[cursor_index]) if event.type == pygame.QUIT: pygame.quit() raise SystemExit pygame.display.flip() clock.tick(144)
Producción:
Publicación traducida automáticamente
Artículo escrito por ayushcoding100 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA