¿Cómo se dibuja / blit un sprite en Pygame con menor opacidad? [duplicar]

Dec 12 2020

Estoy tratando de introducir algo de niebla en un juego, pero me he encontrado con un problema en el que me he dado cuenta de que la niebla es demasiado espesa / opacidad demasiado alta. Quiero borrarlo con una opacidad aún menor, pero no estoy muy seguro de cómo y los tutoriales que encontré en línea no funcionan / ya espero que sepas cómo hacerlo.

En caso de que se pregunte cómo está escrito el código:

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

EDITAR: Estoy usando Python 3.8, en caso de que eso importe

EDITAR EDITAR: Estoy usando Pygame 2.0.0, por si acaso eso también importa

Respuestas

1 Starbuck5 Dec 12 2020 at 06:17

No se ilumina con una opacidad más baja, se ilumina una superficie que tiene una opacidad menor.

Úselo surface.set_alpha()para cambiar la opacidad de la niebla antes de aplicarla.

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

Además, si está cargando en su niebla desde una imagen, asegúrese de usarla surface.convert_alpha(), o de lo contrario no registrará la transparencia en el formato de imagen.

Rabbid76 Dec 12 2020 at 15:45

blit()en realidad combina una superficie con la superficie de destino , dependiendo del canal alfa de la superficie . Todo lo que tienes que hacer es cambiar el canal alfa del fog. Use set_alpha()para establecer el valor alfa para la imagen de Surface completa:

Establezca el valor alfa actual para la superficie. Al enviar esta superficie a un destino, los píxeles se dibujarán ligeramente transparentes. El valor alfa es un número entero de 0 a 255, 0 es completamente transparente y 255 es completamente opaco.

Si desea aplicar una niebla 50% transparente:

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