Wie kann man in Pygame ein Sprite mit geringerer Deckkraft blitzen / zeichnen? [Duplikat]

Dec 12 2020

Ich versuche, etwas Nebel in ein Spiel zu verwandeln, aber ich bin auf ein Problem gestoßen, bei dem ich festgestellt habe, dass der Nebel zu dicht / zu undurchsichtig zu hoch ist. Ich möchte es mit einer noch geringeren Deckkraft blenden, bin mir aber nicht sicher, wie und die Tutorials, die ich online gefunden habe, funktionieren nicht / erwarten bereits, dass Sie wissen, wie es geht.

Nur für den Fall, dass Sie sich fragen, wie der Code geschrieben ist:

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

EDIT: Ich benutze Python 3.8, nur für den Fall, dass das wichtig ist

EDIT EDIT: Ich benutze Pygame 2.0.0, nur für den Fall, dass das auch wichtig ist

Antworten

1 Starbuck5 Dec 12 2020 at 06:17

Sie blenden nicht bei geringerer Deckkraft, sondern bei einer Oberfläche mit geringerer Deckkraft.

Verwenden surface.set_alpha()Sie diese Option, um die Deckkraft des Nebels zu ändern, bevor Sie ihn aufblenden.

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

Wenn Sie von einem Bild in Ihren Nebel laden, stellen Sie sicher, dass Sie surface.convert_alpha()es verwenden, da sonst die Transparenz nicht im Bildformat registriert wird.

Rabbid76 Dec 12 2020 at 15:45

blit()tatsächlich verbindet eine Oberfläche auf die Zielfläche , abhängig von dem Alphakanal der Oberfläche . Alles was Sie tun müssen, ist den Alphakanal des zu ändern fog. Verwenden Sie set_alpha()diese Option , um den Alpha-Wert für das vollständige Oberflächenbild festzulegen:

Stellen Sie den aktuellen Alpha-Wert für die Oberfläche ein. Wenn Sie diese Oberfläche auf ein Ziel verteilen, werden die Pixel leicht transparent gezeichnet. Der Alpha-Wert ist eine Ganzzahl von 0 bis 255, 0 ist vollständig transparent und 255 ist vollständig undurchsichtig.

Wenn Sie einen 50% transparenten Nebel auftragen möchten:

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