Как использовать мышь для масштабирования и поворота изображения в PyGame?
Pygame — мощная библиотека для создания 2D-игр и графических приложений на Python. Он предоставляет широкий спектр функциональных возможностей, включая возможность манипулирования и преобразования изображений. В этой статье мы рассмотрим, как использовать мышь для масштабирования и поворота изображения в Pygame.
Предварительные условия
Прежде чем понять процесс масштабирования и вращения изображений, важно иметь базовое представление о Pygame и его механизме обработки событий. Также убедитесь, что в вашей среде Python установлен Pygame. Вы можете установить его с помощью pip с помощью команды
pip install pygame
Настройка окна Pygame
Для начала давайте создадим окно Pygame, которое будет отображать наше изображение и обрабатывать события мыши. мы можем начать с импорта модулей Pygame
import pygame
import sys
Инициализируйте Pygame и создайте окно определенной ширины и высоты.
Мы установили переменные ширины и высоты на 800 и 600 соответственно, но вы можете настроить эти значения в соответствии с вашими потребностями. Теперь нам нужно обработать основной игровой цикл, который будет постоянно обновлять окно:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
Игровой цикл сохраняет окно открытым до тех пор, пока пользователь не закроет его, нажав кнопку закрытия. Если пользователь нажимает кнопку закрытия, мы выходим из программы, вызывая pygame.quit() и sys.exit().
Загрузка и отображение изображения
Чтобы загрузить и отобразить изображение, нам нужно импортировать его в нашу программу Pygame. Поместите файл изображения в тот же каталог, что и ваш скрипт Python. В этом примере предположим, что файл изображения называется «image.png». Мы можем загрузить и отобразить изображение, используя следующий код:
Функция pygame.image.load() загружает файл изображения, а image.get_rect() возвращает прямоугольный объект, представляющий размеры и положение изображения. Мы используем функцию screen.blit() для рисования изображения на поверхности экрана. Наконец, pygame.display.flip() обновляет дисплей, показывая изображение.
image = pygame.image.load("image.png")
image_rect = image.get_rect()
screen.blit(image, image_rect)
pygame.display.flip()
Масштабирование изображения
Теперь после отображения нашего изображения приступим к его масштабированию с помощью мыши. Мы будем использовать колесо прокрутки мыши для управления коэффициентом масштабирования.
Пример
В приведенном ниже примере мы использовали переменную Scale_factor для отслеживания масштабирования изображения. Когда колесо прокрутки мыши прокручивается вверх (event.button == 4), мы увеличиваем Scale_factor на 0,1. И наоборот, когда колесо прокрутки прокручивается вниз (event.button == 5), мы уменьшаем масштаб_коэффициента на 0,1.
Затем мы используем функцию pygame.transform.scale() для изменения размера исходного изображения на основе коэффициента масштабирования. Ширина и высота масштабированного изображения рассчитываются путем умножения исходных размеров на коэффициент масштабирования.
Scaled_image_rect обновляется, чтобы гарантировать, что изображение останется по центру после масштабирования. Мы очищаем экран с помощью screen.fill((0, 0, 0)) для удаления предыдущего изображения, а затем рисуем масштабированное изображение с помощью screen.blit().
import pygame
import sys
# Initialize Pygame
pygame.init()
# Set up the Pygame window
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Image Scaling Demo")
# Load and display the image
image = pygame.image.load("image.png")
image_rect = image.get_rect()
screen.blit(image, image_rect)
pygame.display.flip()
# Set up scaling variables
scale_factor = 1.0
# Game loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 4: # Scrolling up
scale_factor += 0.1
elif event.button == 5: # Scrolling down
scale_factor -= 0.1
scaled_image = pygame.transform.scale(
image, (int(image_rect.width * scale_factor), int(image_rect.height * scale_factor))
)
scaled_image_rect = scaled_image.get_rect(center=image_rect.center)
screen.fill((0, 0, 0)) # Clear the screen
screen.blit(scaled_image, scaled_image_rect)
pygame.display.flip()
Выход
Примечание. Когда мы запустим этот код, он отобразит изображение в окне Pygame. Вы можете использовать колесо прокрутки мыши для масштабирования изображения вверх и вниз. Прокрутка вверх увеличивает масштаб на 0,1, а прокрутка вниз уменьшает масштаб на 0,1. Масштабированное изображение будет постоянно обновляться и отображаться в окне Pygame.
Поворот изображения
Теперь давайте реализуем функцию вращения с помощью мыши. Мы будем использовать движение мыши для управления углом поворота.
Пример
В приведенном ниже примере мы использовали переменную Rotation_angle для отслеживания поворота изображения. Когда мышь перемещается при нажатой левой кнопке (event.type == pygame.MOUSEMOTION и pygame.mouse.get_pressed()[0]), мы корректируем Rotate_angle на основе относительного движения по координате X (event.rel[ 0]). Разделив его на 10, вы обеспечите более плавное вращение.
Функция pygame.transform.rotate() используется для поворота масштабированного изображения на основе угла поворота. Подобно масштабированию, мы обновляем Rotat_image_rect, чтобы изображение оставалось центрированным после поворота.
import pygame
import sys
# Initialize Pygame
pygame.init()
# Set up the Pygame window
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Image Rotation Demo")
# Load and display the image
image = pygame.image.load("image.png")
image_rect = image.get_rect()
screen.blit(image, image_rect)
pygame.display.flip()
# Set up rotation variables
rotation_angle = 0.0
# Game loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 4: # Scrolling up
rotation_angle += 10
elif event.button == 5: # Scrolling down
rotation_angle -= 10
rotated_image = pygame.transform.rotate(image, rotation_angle)
rotated_image_rect = rotated_image.get_rect(center=image_rect.center)
screen.fill((0, 0, 0)) # Clear the screen
screen.blit(rotated_image, rotated_image_rect)
pygame.display.flip()
Выход
Заключение
В этой статье мы обсудили, как использовать мышь для масштабирования и поворота изображения в Pygame. Используя колесо прокрутки мыши, мы можем динамически регулировать коэффициент масштабирования и наблюдать за преобразованием изображения в режиме реального времени. Аналогичным образом, отслеживая движения и щелчки мыши, мы можем легко вращать изображение, обеспечивая интерактивный и привлекательный пользовательский интерфейс.