#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()
возвращает aSurface
, поэтому вы также можете создать поверхность размером с ваше изображение, просто загрузив его:cat_image = pygame.image.load( "kitteh.png")
, а затем сразу использовать его :screen.blit( cat_image, (10,10) )
.