Jak blitujesz / rysujesz sprite'a w Pygame z mniejszym kryciem? [duplikować]

Dec 12 2020

Próbuję wtopić trochę mgły w grę, ale napotkałem problem, w którym zdałem sobie sprawę, że mgła jest zbyt gruba / krycie zbyt wysokie. Chcę dodać jeszcze mniejszą przezroczystość, ale nie jestem pewien, jak to zrobić, a samouczki, które znalazłem w Internecie, nie działają / oczekuję, że wiesz, jak to zrobić.

Na wypadek gdybyś się zastanawiał, jak napisano kod:

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

EDYCJA: Używam Pythona 3.8, na wszelki wypadek

EDYCJA EDYCJI: Używam Pygame 2.0.0, na wypadek, gdyby to też miało znaczenie

Odpowiedzi

1 Starbuck5 Dec 12 2020 at 06:17

Nie rozmywa się przy niższym kryciu, tylko rozmywa się powierzchnię, która ma mniejsze krycie.

Służy surface.set_alpha()do zmiany krycia mgły przed jej zmiękczeniem.

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

Ponadto, jeśli ładujesz mgłę z obrazu, pamiętaj, aby go użyć surface.convert_alpha(), w przeciwnym razie nie zarejestruje przezroczystości w formacie obrazu.

Rabbid76 Dec 12 2020 at 15:45

blit()w rzeczywistości łączy powierzchnię z powierzchnią docelową , w zależności od kanału alfa powierzchni . Wszystko, co musisz zrobić, to zmienić kanał alfa pliku fog. Użyj, set_alpha()aby ustawić wartość alfa dla pełnego obrazu powierzchni:

Ustaw bieżącą wartość alfa dla powierzchni. Podczas rażenia tej powierzchni na miejsce docelowe piksele będą rysowane jako lekko przezroczyste. Wartość alfa to liczba całkowita od 0 do 255, 0 jest w pełni przezroczyste, a 255 jest w pełni nieprzezroczyste.

Jeśli chcesz zastosować przezroczystą mgłę w 50%:

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