Почему персонаж в игре на Python/PyGame движется, но не поворачивается?

Почему при перемещении шарика с помощью клавиш угол обзора (линия) не меняется? Код работает, но требуется подсказка, чтобы исправить проблему.
Изображение к вопросу
Изображение к вопросу
Изображение к вопросу
  • 5 октября 2023 г. 12:37
Ответы на вопрос 1
Проблема возникает, потому что код не обрабатывает поворот персонажа при перемещении. Вам нужно добавить соответствующую логику для обработки поворота вместе с перемещением.

Одним из способов решить эту проблему является использование переменной, которая будет хранить текущий угол поворота персонажа. Затем при перемещении персонажа вы можете обновить его позицию, а затем использовать функцию `pygame.transform.rotate()` для поворота его изображения на текущий угол.

Вот пример кода, который может помочь вам решить эту проблему:

```
import pygame
import math

# Инициализация Pygame
pygame.init()

# Определение цветов
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

# Создание окна
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Персонаж, перемещение и поворот")

# Загрузка изображения персонажа
character_img = pygame.image.load("character.png")
character_rect = character_img.get_rect()

# Первоначальное местоположение персонажа
character_rect.center = (400, 300)

# Угол поворота персонажа
angle = 0

# Основной цикл игры
running = True
while running:
    # Обработка событий
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # Получение состояния клавиш
    keys = pygame.key.get_pressed()
    
    # Перемещение персонажа
    if keys[pygame.K_LEFT]:
        character_rect.x -= 5
    if keys[pygame.K_RIGHT]:
        character_rect.x += 5
    if keys[pygame.K_UP]:
        character_rect.y -= 5
    if keys[pygame.K_DOWN]:
        character_rect.y += 5
    
    # Поворот персонажа
    if keys[pygame.K_a]:
        angle += 5  # увеличиваем угол поворота на 5 градусов
    if keys[pygame.K_d]:
        angle -= 5  # уменьшаем угол поворота на 5 градусов
    
    # Очистка экрана
    screen.fill(BLACK)
    
    # Поворот и отображение персонажа
    rotated_character = pygame.transform.rotate(character_img, angle)
    rotated_rect = rotated_character.get_rect(center=character_rect.center)
    screen.blit(rotated_character, rotated_rect)
    
    # Обновление экрана
    pygame.display.flip()

# Завершение Pygame
pygame.quit()
```

В этом примере мы используем переменную `angle` для хранения угла поворота персонажа. При нажатии клавиш "a" и "d" мы увеличиваем и уменьшаем угол соответственно. Затем мы используем функцию `pygame.transform.rotate()` для поворота изображения персонажа на текущий угол. После этого мы направляем его в центр позиции персонажа с помощью `get_rect(center=character_rect.center)` и отображаем его на экране.
Похожие вопросы