En este artículo, discutiremos cómo transformar la imagen, es decir (escalar y rotar imágenes) usando el mouse en Pygame.
Acercarse
Paso 1: Primero, importa las bibliotecas Pygame y math.
import pygame import math from pygame.locals import *
Paso 2: Ahora, toma los colores como entrada que queremos usar en el juego.
color_1 = #RGB value of color 1 color_2 = #RGB value of color 2 color_n = #RGB value of color n
Paso 3: Luego, inicializa el constructor
pygame.init()
Paso 4: establece las dimensiones de tu juego GUI.
w, h = #Width dimension, #Height dimension screen = pygame.display.set_mode((w, h))
Paso 5: establezca el valor de ejecución para ejecutar el juego, el ángulo por el cual se puede mover.
running = True angle = 0 scale = 1
Paso 6: A continuación, toma la imagen como entrada que queremos mover con el mouse.
img_logo = pygame.image.load('#Enter the image url') img_logo.convert()
Paso 7: Dibuja un borde alrededor de una imagen.
rect_logo = img_logo.get_rect() pygame.draw.rect(img_logo, color_1, rect_logo, 1)
Paso 8: Ubique el centro del juego GUI y obtenga la posición del mouse.
center = w//2, h//2 mouse = pygame.mouse.get_pos()
Paso 9: Guarde la imagen en una nueva variable y construya un rectángulo alrededor de la imagen.
img = img_logo rect = img.get_rect() rect.center = center
Paso 10: configure las cosas que desea que haga su aplicación cuando se está ejecutando.
while running: for event in pygame.event.get():
- Paso 10.1: Una vez que la aplicación esté en ejecución, haga que se cierre si el usuario desea hacerlo.
if event.type == QUIT: running = False
- Paso 10.2: En caso de que el usuario no quiera salir, establezca en qué ángulo debe girar la imagen.
if event.type == KEYDOWN: if event.key == K_ra: if event.mod & KMOD_SHIFT: # angle at which it should move left angle -= else: # angle at which it should move right angle +=
- Paso 10.3: Además, establezca en qué proporción debe disminuir o aumentar el tamaño de la imagen.
elif event.key == K_sa: if event.mod & KMOD_SHIFT: scale /= #scale at which the image size should decrease else: scale *= #scale at which the image size should increase
- Paso 10.4: establezca en qué coordenadas, ángulo y escala la imagen rotará o cambiará de tamaño.
elif event.type == MOUSEMOTION:
- Paso 10.4.1: Almacene la posición actual del evento en la nueva variable.
mouse = event.pos
- Paso 10.4.2: Ubique las coordenadas cartesianas con la ayuda de la variable del mouse y el centro de la imagen para rotar la imagen.
x = mouse[0] - center[0] y = mouse[1] - center[1]
- Paso 10.4.3: Además, calcule la distancia entre los dos puntos (0,0) y (x, y) con la ayuda de la fórmula √x 2 +y 2
d = math.sqrt(x ** 2 + y ** 2)
- Paso 10.4.4: Ahora, calcule el ángulo en grados en el que la imagen debe rotar usando el método de Python math.atan2() que devuelve el arcotangente de y/x, en radianes.
angle = math.degrees(-math.atan2(y, x))
- Paso 10.4.5: Calcule en qué escala debe disminuir o aumentar el tamaño de la imagen utilizando la función abs , que devuelve la magnitud del número.
scale = abs(5 * d / w)
- Paso 10.4.6: Calcule la posición actualizada de la imagen en el estado de ejecución utilizando la función de zoom giratorio, que es una transformación combinada de escala y rotación.
img = pygame.transform.rotozoom(img_logo, angle, scale)
- Paso 10.4.7: Construya el rectángulo alrededor de la imagen actualizada
rect = img.get_rect() rect.center = center
Paso 11: A continuación, debe configurar el color de la pantalla y la imagen en la pantalla.
screen.fill(color_3) screen.blit(img, rect)
Paso 12: Más tarde, dibuja el rectángulo , la línea ,y círculos que ayudarán a mover la imagen.
pygame.draw.rect(screen, color_2, rect, #thickness of rectangle) pygame.draw.line(screen, color_3, center, mouse, #Thickness of line) pygame.draw.circle(screen, color_1, center, #radius of circle, #thickness of circumference) pygame.draw.circle(screen, color_2, mouse, #radius of circle, #thickness of circumference)
Paso 13: además, actualice los cambios realizados en el juego GUI.
pygame.display.update()
Paso 14: Finalmente, sal del juego GUI.
pygame.quit()
A continuación se muestra la implementación.
Python
# Python program to transform the # image with the mouse #Import the libraries pygame and math import pygame import math from pygame.locals import * # Take colors input RED = (255, 0, 0) BLACK = (0, 0, 0) YELLOW = (255, 255, 0) #Construct the GUI game pygame.init() #Set dimensions of game GUI w, h = 600, 440 screen = pygame.display.set_mode((w, h)) # Set running, angle and scale values running = True angle = 0 scale = 1 # Take image as input img_logo = pygame.image.load('gfg_image.jpg') img_logo.convert() # Draw a rectangle around the image rect_logo = img_logo.get_rect() pygame.draw.rect(img_logo, RED, rect_logo, 1) # Set the center and mouse position center = w//2, h//2 mouse = pygame.mouse.get_pos() #Store the image in a new variable #Construct the rectangle around image img = img_logo rect = img.get_rect() rect.center = center # Setting what happens when game is # in running state while running: for event in pygame.event.get(): # Close if the user quits the game if event.type == QUIT: running = False # Set at which angle the image will # move left or right if event.type == KEYDOWN: if event.key == K_ra: if event.mod & KMOD_SHIFT: angle -= 5 else: angle += 5 # Set at what ratio the image will # decrease or increase elif event.key == K_sa: if event.mod & KMOD_SHIFT: scale /= 1.5 else: scale *= 1.5 # Move the image with the specified coordinates, # angle and scale elif event.type == MOUSEMOTION: mouse = event.pos x = mouse[0] - center[0] y = mouse[1] - center[1] d = math.sqrt(x ** 2 + y ** 2) angle = math.degrees(-math.atan2(y, x)) scale = abs(5 * d / w) img = pygame.transform.rotozoom(img_logo, angle, scale) rect = img.get_rect() rect.center = center # Set screen color and image on screen screen.fill(YELLOW) screen.blit(img, rect) # Draw the rectangle, line and circle through # which image can be transformed pygame.draw.rect(screen, BLACK, rect, 3) pygame.draw.line(screen, RED, center, mouse, 2) pygame.draw.circle(screen, RED, center, 6, 1) pygame.draw.circle(screen, BLACK, mouse, 6, 2) # Update the GUI game pygame.display.update() # Quit the GUI game pygame.quit()
Producción: