¿Cómo usar el mouse para escalar y rotar una imagen en PyGame?

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:

Publicación traducida automáticamente

Artículo escrito por vin8rai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *