Как в Pygame нарисовать спрайт с меньшей непрозрачностью? [дубликат]
Я пытаюсь добавить немного тумана в игру, но столкнулся с проблемой, когда понял, что туман слишком густой / непрозрачность слишком высокая. Я хочу сделать это с еще меньшей непрозрачностью, но я не совсем уверен, как это сделать, а учебники, которые я нашел в Интернете, не работают / уже ожидаю, что вы знаете, как это сделать.
На всякий случай вам интересно, как написан код:
screen.blit(fog, (0, 0))
РЕДАКТИРОВАТЬ: я использую Python 3.8, на всякий случай, если это имеет значение
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: я использую Pygame 2.0.0, на всякий случай, это тоже имеет значение
Ответы
Вы не копируете с более низкой непрозрачностью, вы копируете поверхность с меньшей непрозрачностью.
Используйте, surface.set_alpha()
чтобы изменить непрозрачность тумана перед его растушевкой.
Документы: https://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_alpha
Кроме того, если вы загружаете свой туман из изображения, обязательно используйте surface.convert_alpha()
его, иначе он не будет регистрировать прозрачность в формате изображения.
blit()фактически смешивает поверхность с целевой поверхностью в зависимости от альфа-канала поверхности . Все, что вам нужно сделать, это изменить альфа-канал файла fog
. Используйте, set_alpha()чтобы установить значение альфа для всего изображения поверхности:
Установите текущее значение альфа-канала для поверхности. При копировании этой поверхности на место назначения пиксели будут нарисованы слегка прозрачными. Значение альфа - целое число от 0 до 255, 0 - полностью прозрачное, а 255 - полностью непрозрачное.
Если вы хотите применить 50% прозрачный туман:
fog.set_alpha(127)
screen.blit(fog, (0, 0))