Skocz do zawartości

Obszarowy background_alpha


TO_mek

Rekomendowane odpowiedzi

Witam!

 

Mam dużego rooma (5000x5000) z widokiem 1024x768. Potrzebuje nadać tłu background_alpha[0] = 0.4 ale chcę to zrobić:

- po pierwsze tylko na aktualnie widocznym ekranie gry (widok 1024x768) (jeśli będzie to rozwiązane na obiektach to sobie je wyłączę gdy są poza widokiem),

- po drugie, co jest sednem pytania, potrzebuje zrobić kilka obszarów na tym ekranie przyciemnionych a kilka jasnych.

 

Ekran gry przedstawia kolejne pietra budynku, na każdym z pieter może być włączone kilka źródeł światła (obiekty: lampa_obj) i właśnie tylko te miejsca powinny być oświetlone (mieć background_alpha[0] = 1) a pozostałe miejsca przyciemnione (background_alpha[0] = 0.4). Załóżmy że lampy świecą w okręgu o promieniu 100px, najlepiej jeszcze gdyby działało to tak, że im bliżej lampy tym jaśniej czyli taki płynny efekt przejścia do cienia. Dodatkowo światło powinno zatrzymywać się na stropach i ścianach (np. na konkretnym obiekcie sciana_obj).

 

Próbowałem coś zrozumień z przykładu "latarka" pobranego z gmclan ale nie bardzo mi się udaje użyć surfejsów i polecenia

draw_set_blend_mode_ext( bm_add, bm_subtract ); (oraz innych)

i pojawiają mi się dziwne efekty jakbym miał uszkodzoną kartę grafiki albo w najlepszym przypadku czarny ekran.

 

Mógłby mi to ktoś dokładniej wytłumaczyć.

Odnośnik do komentarza
Udostępnij na innych stronach

Wprawdzie nie rozumiem dokładnie pytania, ale strzelam że chcesz żeby część była bardziej lub mniej przezroczysta. Przygotuj sprite o tym samym rozmiarze. Namazaj na nim białe obszary - im mniej szary tym większa przezroczystość. Teraz przed akcją rysowania go lub na początku gry daj instrukcję background_set_alpha_from_sprite. Na głównej jest artykul o maskach alpha.

Odnośnik do komentarza
Udostępnij na innych stronach

Background rysuje się tylko na aktualnym obszarze gry. W czym problem? Załaduj odpowiednie PNG i tyle. Tylko nie odznaczaj draw background color.

 

Aż tak niezrozumiale napisałem pierwszego posta? Robię coś w rodzaju platformówki, mam rooma 5000x5000, ładuje do niego tło na którym mam narysowany przekrój budynku z poszczególnymi piętrami.

Teraz chcę aby:

- nadać na każdym piętrze przyciemnienie czyli odpowiednik bacground_alpha na ~0.4

- na zewnątrz budynku nadać background_alpha = 1 czyli bez przyciemniania,

- na każdym z pięter jest kilka miejsc gdzie są zamontowane lampy, które mają rozświetlić korytarz po ich załączeniu,

- lampy mają działać tylko w ograniczonym zakresie czyli świecić wokoło (promień ok. 100px) ale tak by światło nie przechodziło przez stropy,

- na koniec jeszcze może efekty typu cień postaci zbliżającej się do źródeł światła oraz być możę drganie światła (coś jak drgający płomień świecy).

 

Mam nadzieję że teraz jest wszystko jasne.

Odnośnik do komentarza
Udostępnij na innych stronach

Dawidds: Widok z boku.

 

Mając tło 5000x5000 to już bym sie nad wydajnością zastanawiał...

 

Dlatego tez od razu w pierwszym poście pisałem że efekty chcę ograniczyć do aktualnie widocznego ekranu bo po co mi się ma przeliczać coś czego aktualnie nie widać na ekranie. Ale wyłączenie obiektów z poza aktualne wyświetlanego widoku to już nie problem. Pytanie jak uzyskać efekty światła najmniej tracąc na wydajności.

Odnośnik do komentarza
Udostępnij na innych stronach

Wprawdzie nie rozumiem dokładnie pytania, ale strzelam że chcesz żeby część była bardziej lub mniej przezroczysta. Przygotuj sprite o tym samym rozmiarze. Namazaj na nim białe obszary - im mniej szary tym większa przezroczystość. Teraz przed akcją rysowania go lub na początku gry daj instrukcję background_set_alpha_from_sprite. Na głównej jest artykul o maskach alpha.

 

Takiej komendy nie ma w gm8 a w sumie częściowo to by rozwiązało problem. Są background_set_alpha_from_background sprite_set_alpha_from_sprite.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...