Как мне изменить спрайт из прямоугольника в изображение?

#python #image #pygame #pygame-surface

#python #изображение #pygame #pygame-поверхность

Вопрос:

Итак, я скопировал некоторый код из Интернета (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:

Rect объект не предназначен для хранения изображений. pygame.image.load() возвращает a 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] помощью . Если они не соответствуют размеру изображения, изображение будет вырезано (если оно больше).

Кстати, наложение буквы a Surface на другую Surface — это то, что вы делаете, отображая поверхность на экране. В pygame экран просто другой Surface , немного особенный.

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

Комментарии:

1. pygame.image.load() возвращает a Surface , поэтому вы также можете создать поверхность размером с ваше изображение, просто загрузив его: cat_image = pygame.image.load( "kitteh.png") , а затем сразу использовать его : screen.blit( cat_image, (10,10) ) .