Pygame: как вставить спрайт вместо рисования моего персонажа в pygame

Итак, я следил за некоторыми видео на YouTube о том, как создать Pacman с помощью Pygame, и он показал только, как нарисовать простой желтый круг, я пытаюсь заменить эту простую форму реальным спрайтом, но я не мог заставить его работать вот мой код, у меня есть класс под названием Player, в котором я рисую своего персонажа pacman, я использую функцию рисования pygame, чтобы нарисовать простой желтый круг

def draw(self):
        pygame.draw.circle(self.app.screen,PLAYER_COLOUR, (int(self.pix_pos.x), int(self.pix_pos.y)),
        self.app.cell_width//2-2)

а затем у меня есть еще один класс с именем app_class, где я создаю новый экземпляр класса Player и помещаю его в правильное положение

Я попытался заменить draw на image.load, но это не сработало.


person Hyperion    schedule 07.07.2020    source источник


Ответы (1)


Модуль pygame.draw содержит только функции для рисования простых форм. Если это не то, что вы хотите, вам нужно использовать другой модуль.

pygame.image.load - это функция, которая загружает изображение с вашего жесткого диска в основную память. Вы можете думать об этом как о загрузке изображения с вашего компьютера в вашу программу. Таким образом, он не делает ничего, кроме предоставления доступа к изображению.

Чтобы иметь возможность рисовать изображение, вы должны явно указать pygame для этого. Вы делаете это, вызывая метод blit на объекте Surface, в вашем случае на экране.

Итак, сначала загрузите изображение в начале вашей программы. Вы не должны вызывать эту функцию каждый игровой цикл, потому что это дорого. Назовите это только один раз.

my_image = pygame.image.load('path/to/my_image.jpg').convert()

Метод convert - это просто способ сделать изображение более эффективным в вашей программе. Он преобразует изображение в нужный цветовой формат. Вы не увидите разницы, если исключите ее, но при этом вы получите больше производительности.

Вам нужно перетащить («нарисовать») его на экран. В вашем случае вы бы сделали что-то вроде этого:

def draw(self):
    self.app.screen.blit(my_image, (x, y))

где x и y - это положение, в котором вы хотите, чтобы изображение было, или, точнее, где вы хотите, чтобы был расположен верхний левый угол. В настоящее время x и y не определены, поэтому вы должны определить их самостоятельно. Либо сделайте их глобальными, либо поместите в свой класс и получите к ним доступ с помощью self.x и self.y.

Кроме того, изображение может быть не того размера, который вам нужен. Чтобы исправить это, вы можете изменить его размер сразу после загрузки, например:

width  = 50  # Or whatever size you want it to be.
height = 50
my_image = pygame.image.load('path/to/my_image.jpg').convert()
my_image = pygame.transform.scale(my_image, (width, height))
person Ted Klein Bergman    schedule 07.07.2020