Pygame, как изменить размер поверхности? - PullRequest
3 голосов
/ 27 июня 2011

Как изменить размер поверхности в Pygame с изображением (без масштабирования). Когда я загружаю изображение в Pygame, поверхность становится размером изображения. Мне нужно изменить размер поверхности на размер рамки (спрайт-лист).

Вот код, который я использовал для решения проблемы (спасибо Крису Деннетту):

self.surface = pygame.Surface((20, 20))
self.surface.blit(pygame.image.load(imageName).convert_alpha(), (0,0), (0, 0, frameWidth, frameHeight))

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Для листов спрайтов у вас есть 2 хороших варианта.

1) Загрузить таблицу спрайтов как одну поверхность.

Когда блиттинг, используйте аргумент source rect. Это сместит только один кадр с листа.

2) Использовать недра.

Загрузить таблицу спрайтов как одну поверхность. Загрузите подповерхность каждого кадра, который вы хотите: http://www.pygame.org/docs/ref/surface.html#Surface.subsurface

Насколько вам известно, подповерхность - это «новая» поверхность с шириной и высотой ячейки. Но это не дублирующая память. Это связано.

Из документов:

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

3 голосов
/ 27 июня 2011

Создайте новую поверхность, передав в качестве аргументов желаемую ширину и высоту (т. Е. Насколько велик спрайт). Затем используйте newsurf.blit(spritesheet, (0, 0), (posX, posY, newsurf.getWidth(), newsurf.getHeight())). Должно сработать. Тогда вы можете использовать newsurf в качестве спрайта. posX и posY должны быть x и y, из которых вы хотите сделать блик в вашем листе спрайта соответственно.

...