Como você blit / desenha um sprite no Pygame com menor opacidade? [duplicado]

Dec 12 2020

Estou tentando transformar um pouco de névoa em um jogo, mas me deparei com um problema em que percebi que a névoa é muito densa / opaca para muito alta. Quero blitá-lo com uma opacidade ainda menor, mas não tenho certeza de como e os tutoriais que encontrei online não funcionam / já espero que você saiba.

Caso você esteja se perguntando como o código foi escrito:

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

EDIT: Estou usando Python 3.8, apenas no caso de isso importar

EDITAR EDITAR: Estou usando o Pygame 2.0.0, apenas no caso de isso também importar

Respostas

1 Starbuck5 Dec 12 2020 at 06:17

Você não faz o blit com opacidade inferior, mas sim uma superfície com opacidade inferior.

Use surface.set_alpha()para alterar a opacidade da névoa antes de apagá-la.

Docs: https://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_alpha

Além disso, se você estiver carregando no seu nevoeiro a partir de uma imagem, certifique-se de usar surface.convert_alpha()nela, ou então não registrará a transparência no formato da imagem.

Rabbid76 Dec 12 2020 at 15:45

blit()na verdade, combina uma superfície com a superfície de destino , dependendo do canal alfa da superfície . Tudo que você precisa fazer é alterar o canal alfa do fog. Use set_alpha()para definir o valor alfa para toda a imagem da superfície:

Defina o valor alfa atual para a superfície. Ao blitting esta Surface em um destino, os pixels serão desenhados ligeiramente transparentes. O valor alfa é um número inteiro de 0 a 255, 0 é totalmente transparente e 255 é totalmente opaco.

Se você deseja aplicar uma névoa transparente de 50%:

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