Как мне изменить спрайт с прямоугольника на изображение? - PullRequest
1 голос
/ 12 апреля 2019

Итак, я скопировал некоторый код из интернета (http://programarcadegames.com/python_examples/f.php?file=platform_moving.py) просто для экспериментов с Pygame ...

Я пытался заменить self.image.fill(BLUE) на self.rect = pygame.image.load("TheArrow.png")

Вот небольшой фрагмент моего кода ..

 def __init__(self):
        """ Constructor function """

        # Call the parent's constructor
        super().__init__()

        # Create an image of the block, and fill it with a color.
        # This could also be an image loaded from the disk.
        width = 40
        height = 60
        self.image = pygame.Surface([width, height])
        self.image.fill(BLUE)
        self.rect = pygame.image.load("TheArrow.png")

        # Set a referance to the image rect.
        self.rect = self.image.get_rect()

        # Set speed vector of player
        self.change_x = 0
        self.change_y = 0

        # List of sprites we can bump against
        self.level = None

Вот оригинальный код ...

def __init__(self):
        """ Constructor function """

        # Call the parent's constructor
        super().__init__()

        # Create an image of the block, and fill it with a color.
        # This could also be an image loaded from the disk.
        width = 40
        height = 60
        self.image = pygame.Surface([width, height])
        self.image.fill(RED)

        # Set a referance to the image rect.
        self.rect = self.image.get_rect()

        # Set speed vector of player
        self.change_x = 0
        self.change_y = 0

        # List of sprites we can bump against
        self.level = None

Я хочу, чтобы изображение TheArrow.png отображалось вместо прямоугольника ....

1 Ответ

2 голосов
/ 12 апреля 2019

Rect объект не предназначен для хранения изображений. pygame.image.load() возвращает Surface с изображением. Его можно использовать напрямую или на другом Surface.

 def __init__(self):
    """ Constructor function """

    # Call the parent's constructor
    super().__init__()

    width = 40
    height = 60
    self.image = pygame.image.load("TheArrow.png") #use the image Surface directly
    self.rect = self.image.get_rect()
    #the rest as in the original code

или

 def __init__(self):
    """ Constructor function """

    # Call the parent's constructor
    super().__init__()

    width = 40
    height = 60
    myimage = pygame.image.load("TheArrow.png")
    self.image = pygame.Surface([width, height])
    self.image.blit(myimage) #blit the image on an existing surface
    self.rect = self.image.get_rect()
    #the rest as in the original code

В первом случае размер Surface (связанный с ним прямоугольник, который можно получить с помощью self.image.get_rect(), совпадает с размером загруженного файла изображения.
В последнем случае вы устанавливаете размер с помощью [with, height]. Если они не соответствуют размеру изображения, оно будет обрезано (если оно больше).

Кстати, перетаскивая Surface на другой Surface, вы отображаете поверхность на экране. В Pygame экран - это просто еще один Surface, немного особенный.

Для получения дополнительной информации ознакомьтесь с вводным учебником .

...