Jak blitujesz / rysujesz sprite'a w Pygame z mniejszym kryciem? [duplikować]
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
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.
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))