Вращение вокруг центра
Часть раздела Спрайты и изображения путешествия по Pygame на Coddy. Урок 6 из 36.
Кораблю, который поворачивает, нужно повёрнутое изображение. pygame.transform.rotate(image, angle) возвращает новую Surface: изображение, повёрнутое на angle градусов против часовой стрелки. Отрицательный угол поворачивает его по часовой стрелке. Исходное изображение не меняется.
Поворачиваемый квадрат не помещается в квадрат того же размера, поэтому новая Surface больше: корабль, повёрнутый на 45 градусов, имеет размер 90 на 90 пикселей. Если вывести его в прежнем верхнем левом углу, его середина сместится вниз и вправо; при повороте корабль будет покачиваться по окну.
Вместо этого оставьте середину на прежнем месте. Запросите у повёрнутого изображения Rect, центрированный в той же точке:
rotated = pygame.transform.rotate(ship, angle)
rotated_rect = rotated.get_rect(center=(320, 240))
screen.blit(rotated, rotated_rect)Каждый кадр поворачивайте исходный ship на весь angle. Направление корабля — это число в angle, и изображение создаётся на его основе.
Задание
Средне- Перед циклом задайте
angle = 0. - При удерживании клавиши Left к
angleкаждый кадр прибавляется 3 (вращение против часовой стрелки); при удерживании Right от него отнимается 3. - Каждый кадр поворачивайте
shipнаangleи рисуйте результат так, чтобы его центр находился в точке(320, 240).
Попробуйте сами
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Turn the Ship")
clock = pygame.time.Clock()
ship = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship.get_rect(center=(320, 240))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(ship, ship_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Все уроки раздела Спрайты и изображения
1Загрузка изображений
Загрузить изображениеРазместить его с помощью RectПереместить изображениеЗамостить фонПрозрачные пиксели2Поворот, отражение, масштабирование
Вращение вокруг центраПовернись в направлении полётаИзменение масштаба изображенияВращение от исходного изображения5Пиксельно точные столкновения
Прямоугольники кажутся несправедливымиМаскиПиксельно точные спрайтыКруглые хитбоксы3Классы игровых объектов
Ваш первый классМетодыSelf — это объектСписок объектовОбъекты с изображениямиПодкласс6Анимация с помощью листов спрайтов
Разрезать лист спрайтовСчётчик кадровАнимация по времениОднократная анимация взрываПотренируйтесь самостоятельно: Песочница Pygame