Копирование непрямоугольных спрайтов с помощью Pygame, Python 3

В настоящее время я создаю игру, в которой загружаю спрайты и фон из изображений (PNG) с помощью функции pygame.image.load().

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

введите описание изображения здесь

Есть ли простой способ решить эту проблему? Заранее благодарю за любую помощь.


person Vladimir Shevyakov    schedule 25.01.2016    source источник
comment
Вы уверены, что само изображение корабля прозрачное? Мне просто удалось загрузить прозрачные .png файлы. Кроме того, какое программное обеспечение вы использовали для создания этого изображения?   -  person ASCIIThenANSI    schedule 25.01.2016


Ответы (1)


Если изображение имеет прозрачный фон (некоторые пиксели прозрачны) (PNG), вам необходимо использовать convert_alpha ()

 image = pygame.image.load(filename).convert_alpha()

Если изображение не имеет прозрачного фона (GIF, JPG), вы можете использовать set_colorkey () и pygame будет рассматривать выбранный цвет как прозрачный.

 image = pygame.image.load(filename).set_colorkey(color)

Многие изображения спрайтов используют розовый как ключевой цвет.

введите описание изображения здесь

person furas    schedule 25.01.2016
comment
Я пробовал использовать convert_alpha (), но это не имело никакого значения. Может быть, я сделал это на mspaint? - person Vladimir Shevyakov; 26.01.2016
comment
Вы должны использовать PNG с прозрачными пикселями. Если вы видите белый фон в программе просмотра изображений, значит, у вас нет прозрачного фона, и convert_alpha() не будет работать. И тогда вы можете использовать только set_colorkey(WHITE) (где WHITE = (255,255,255)) - person furas; 26.01.2016
comment
Хорошо, спасибо ... но как я могу сделать изображение с прозрачными пикселями прямо в mspaint или другом программном обеспечении? - person Vladimir Shevyakov; 26.01.2016
comment
У меня нет mspaint, но я думаю, что в mspaint нельзя получить прозрачный фон. Вам нужен GIMP, paint.net или любую другую растровую программу (или Inkscape, если вы предпочитаете использовать векторный объект) - person furas; 26.01.2016