Skocz do zawartości

Problem z depth


TO_mek

Rekomendowane odpowiedzi

Witam!

Mam w jeden obiekt odpowiadający za rysowanie na roomie sprajtów nie będących obiektami. Obiekt ten rysuje zarówno HUDa (który zawsze musi być na pierwszym planie) jak i elementy grafiki znajdujące się "w głębi" rooma które mają być na ostatnim planie np. obrazki wiszące na ścianie itp. (widok z boku jak w platformówce). Pomiędzy HUDem a takimi przykładowymi obrazkami chodzą postacie przeciwników (osobne obiekty) oraz hero.

 

Problem w tym, że nie da się tak ustawić parametrów depth obiektu rysującego aby obiekty hero i przeciwników "wchodziły" między HUDa a obrazki bo albo chodzą "na" HUDzie albo "pod" obrazkami.

 

Czy jest jakiś sposób aby za pomocą tego jednego obiektu odpowiadającego za rysowanie uzyskać efekt taki jaki potrzebuję? Wspomnę, że ustawianie odpowiedniej "głębokości" parametrem depth tuż przed rysowaniem HUDa i obrazków nie daje żadnego efektu.

Odnośnik do komentarza
Udostępnij na innych stronach

Najprostsza z odpowiedzi brzmi:

NIE

 

Bo GM sam w sobie nie pozwala na coś takiego. Nie daje nam nic co mogłoby nam coś takiego ułatwić. Ale można to objeść.

Należy zrobić jakiś obiekt, który będzie odpowiedzialny za rysowanie WSZYSTKIEGO w odpowiedniej kolejności. Dla ułatwienia inne obiekty mogą mieć to co zwykle mają w draw np. w User Event. Wtedy same nie będą tego wykonywać, a nasz obiekt rysujący może dla każdego obiektu te User Event wykonać.

Odnośnik do komentarza
Udostępnij na innych stronach

aby zrobic co chciales musialbys wlasnie zrobic jak powiedzial platyna, czyli rysowac WSZYSTKO w jednym obiekcie w odpowiedniej kolejnosci, czyli im dalej ma byc tym wczesniej musi byc rysowany:

GML
draw_tlo

draw_potworki

draw_bohater

draw_hud

Odnośnik do komentarza
Udostępnij na innych stronach

aby zrobic co chciales musialbys wlasnie zrobic jak powiedzial platyna, czyli rysowac WSZYSTKO w jednym obiekcie w odpowiedniej kolejnosci, czyli im dalej ma byc tym wczesniej musi byc rysowany:

GML
draw_tlo

draw_potworki

draw_bohater

draw_hud

 

 

No tak ale warunkiem jest to, że musiałbym także obsługiwać rysowanie sprajtów obiektów potworków i bohatera, bo to że w odpowiedniej kolejności to wiem bo chociażby HUDa mam z kilku kawałków zachodzących na siebie. Chyba na obecnym etapie mojego projektu dodam drugi obiekt rysujący który będzie rysował grafiki na ostatnim planie (czyli te za hero i przeciwnikami) a ten pierwszy który mam teraz będzie odpowiadał za rysowanie HUDa (czyli za plan pierwszy).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Nawet jak tak robię w swoich projektach, więc się nie martw. Dosłownie dzisiaj w nocy była dyskusja aby w GM 8.1 dodać funkcję draw_set_depth();, ale wymaga ona sporo zmian i na pewno nie będzie jej w GM 8.1, o ile w ogóle.

Z tego co wiem, przed eventem draw instancje są sortowane wg wartości depth (np. zmienionej w stepie), i na tej podstawie rysowane, niczym na warstwach w fotoszopie. Zmiana deptha w evencie draw nic nie zmienia tak naprawdę (ustawionia wartość w kolejnym stepie jest sortowana przed eventem draw, zatem choćbyśmy 10 razy ją zmieniali po drodze, ustawiona będzie tylko ta ostatnia wartość, bo to ona jest aktualną).

Odnośnik do komentarza
Udostępnij na innych stronach

Dosłownie dzisiaj w nocy była dyskusja aby w GM 8.1 dodać funkcję draw_set_depth();, ale wymaga ona sporo zmian i na pewno nie będzie jej w GM 8.1, o ile w ogóle.
Rozwiń trochę Twoją wizję tego jak miało by to działać, bo jak dla mnie technicznie nie jest możliwe narysowanie czegoś _pod_ wcześniej narysowanym obiektem (a na pewno nie pod półprzezroczystym).

 

W gmie nic nie jest sortowane, a już na pewno nie co stepa (zrób sobie test i zobacz ile by trwało sortowanie listy nawet 1k elementów 60 razy na sekundę) - po prostu w momencie tworzenia instancji jest ona wstawiana do kolekcji instancji od razu w odpowiednim (według depthu) miejscu. Ewentualna zmiana depthu wymusza po zakończeniu eventu draw (albo gdzie indziej, to akurat nieistotne) przestawienie tej konkretnej instancji w inne miejsce.

Nie można narysować czegoś POD wcześniej narysowanym półprzezroczystym spritem, więc jeśli miała by istnieć możliwość zmiany depthu podczas rysowania to tylko tych instancji, które ZA CHWILĘ mają zostać dopiero narysowane. Tej, którą właśnie rysujemy nie można narysować _wcześniej_, co najwyżej można ją przesunąć kawałek dalej i wykonać drawa jeszcze raz _za chwilę_, ale to też by było troszkę pozbawione sensu (wykonywać draw dwa razy w czasie jednej klatki?).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Czy przestawienie elementu w drzewie nie jest sortowaniem? Jeśli co stepa utawię depth na wartosć losową, to nie będę miał co stepa sortowania? Omówiłem to ogólnikowo, bo kodu GM nie znam.

Co do draw_set_depth() to nie ja wymyśliłem, ale ktoś z GMCommunity, ale pomysł odrzucono.

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ę...