Как в Pygame нарисовать спрайт с меньшей непрозрачностью? [дубликат]

Dec 12 2020

Я пытаюсь добавить немного тумана в игру, но столкнулся с проблемой, когда понял, что туман слишком густой / непрозрачность слишком высокая. Я хочу сделать это с еще меньшей непрозрачностью, но я не совсем уверен, как это сделать, а учебники, которые я нашел в Интернете, не работают / уже ожидаю, что вы знаете, как это сделать.

На всякий случай вам интересно, как написан код:

screen.blit(fog, (0, 0))

РЕДАКТИРОВАТЬ: я использую Python 3.8, на всякий случай, если это имеет значение

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: я использую Pygame 2.0.0, на всякий случай, это тоже имеет значение

Ответы

1 Starbuck5 Dec 12 2020 at 06:17

Вы не копируете с более низкой непрозрачностью, вы копируете поверхность с меньшей непрозрачностью.

Используйте, surface.set_alpha()чтобы изменить непрозрачность тумана перед его растушевкой.

Документы: https://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_alpha

Кроме того, если вы загружаете свой туман из изображения, обязательно используйте surface.convert_alpha()его, иначе он не будет регистрировать прозрачность в формате изображения.

Rabbid76 Dec 12 2020 at 15:45

blit()фактически смешивает поверхность с целевой поверхностью в зависимости от альфа-канала поверхности . Все, что вам нужно сделать, это изменить альфа-канал файла fog. Используйте, set_alpha()чтобы установить значение альфа для всего изображения поверхности:

Установите текущее значение альфа-канала для поверхности. При копировании этой поверхности на место назначения пиксели будут нарисованы слегка прозрачными. Значение альфа - целое число от 0 до 255, 0 - полностью прозрачное, а 255 - полностью непрозрачное.

Если вы хотите применить 50% прозрачный туман:

fog.set_alpha(127)
screen.blit(fog, (0, 0))