← Все вопросы

Как повернуть спрайт в сторону движения в pygame (transform.rotate)?

Задан 3 месяца назад1.4к просмотров2 ответа
6

Делаю игру с машинкой/корабликом. Спрайт нарисован смотрящим вверх, а я хочу, чтобы он поворачивался в ту сторону, куда едет. Нашёл pygame.transform.rotate, но картинка после поворота дёргается и съезжает с места. Как сделать правильно?

2 ответа

11
✓ Принятый ответ — помог автору

pygame.transform.rotate(img, angle) поворачивает картинку на угол в градусах (против часовой). Главная ловушка: повёрнутая картинка получается другого размера (прямоугольник вокруг неё больше), поэтому если рисовать по старым координатам — спрайт «съезжает». Лечится через выравнивание по центру.

original = pygame.image.load("ship.png").convert_alpha()  # один раз

# в цикле:
rotated = pygame.transform.rotate(original, angle)
# центрируем повёрнутую картинку в точке (cx, cy)
rect = rotated.get_rect(center=(cx, cy))
screen.blit(rotated, rect)

Два важных правила:

  1. Поворачивай всегда оригинал (original), а не уже повёрнутую картинку — иначе при каждом кадре качество теряется и спрайт «плывёт».
  2. Используй get_rect(center=...), чтобы центр оставался на месте.

Дёрганье как раз от того, что без центрирования левый-верхний угол скачет при смене размера.

4

Если поворачиваешь часто на одни и те же углы (например только 0/90/180/270) — поверни картинки один раз заранее и сложи в список или словарь, а в цикле просто бери готовую. Поворот не бесплатный, незачем гонять его каждый кадр, если угол не меняется.

Ваш ответ

Войдите, чтобы ответить на вопрос.