oLuju Opublikowano 25 Stycznia 2016 Udostępnij Opublikowano 25 Stycznia 2016 W swoich projektach bardzo często używam funkcji 'draw' do rysowania, gdyż jest to o wiele szybsze i prostsze. Po co tworzyć nowy sprite, który jest, np.: tylko prostym zielonym kwadratem jeśli to samo można zrobić za pomocą 1 komendy. Jednak używając jej wielokrotnie natrafiłem na pewien problem. Otóż gdy rysuje 2 obiekty na sobie nakładają się na siebie (1 przysłania 2), lecz niestety w pewnym przypadkach albo zwykły sprite jest nad tym narysowanym obiektem z funkcji 'draw' lub 2 taki obiekt nieoczekiwanie go przysłania. Moje pytanie jest następujące: Czy jest jakiś sposób na ustalenie "głębi" (depth) rysowanych obiektów za pomocą tej że funkcji? Próbowałem zmieniać głębie normalnie w obiektach, które posiadają skrypt rysowania, jednak to nie daje żadnych efektów. http://zapodaj.net/images/b1748538f4323.jpg Na przedstawionym screenie czerwony prostokąt jest narysowany funkcją draw_rectangle(), a białe kwadraty draw_sprite(), obiekt rysujący prostokąt ma depth=-1, a obiekt rysujący sprite depth=1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 25 Stycznia 2016 Udostępnij Opublikowano 25 Stycznia 2016 Raczej nie powinno być problemu. depth oznacza kolejność wykonywania kodu w obiektach. Te z większym będą się wykonywać wcześniej. Różnica była by gdybyś używał Begin Draw albo End Draw, bo działa to tak że pierw jest begin wszystkich obiektów, potem zwykły draw wszystkich obiektów, a na koniec end draw wszystkich obiektów. No a sam kod wykonuje się po kolei. Od lewej do prawej. Więc GML draw_recrangle() draw_sprite() draw_recrangle() Narysuje sprite pomiędzy rysowaniem rectangle. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
oLuju Opublikowano 26 Stycznia 2016 Autor Udostępnij Opublikowano 26 Stycznia 2016 OK, rozumiem z tym begin i end, ale od kiedy Depth ustala kolejność wykonywania skryptów?! Przypuśćmy, że mamy jakiś kod składający się z 10 linijek to oczywiste jest, że 10 linia wykona się na samym końcu. Ale Depth?! Tu: http://docs.yoyogames.com/source/dadiospic...ties/depth.html znajduję się potwierdzenie tego co mówię. GML draw_recrangle() draw_sprite() draw_recrangle() Okej, ale po co rysować 2x kwadrat? Nie lepiej: GML draw_sprite() draw_recrangle() Rysowanie sprite'a wykona się jako pierwsze, a kwadratu jako drugie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Stycznia 2016 Udostępnij Opublikowano 26 Stycznia 2016 Depth nie ma bezpośredniego wpływu na kolejność wykonywania kodu. Ma wpływ na kolejność obiektów. Event draw w obiekcie z większym depth wykona się przed eventem draw obiektu z mniejszym depth. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
oLuju Opublikowano 26 Stycznia 2016 Autor Udostępnij Opublikowano 26 Stycznia 2016 Aaaaa no chyba, że tak. Lecz jeszcze jedna sprawa... Event draw w obiekcie z większym depth wykona się przed eventem draw obiektu z mniejszym depth. Większym depth czyli depth=np.:1? Bo nie zapominajmy, że mając np.: 2 obiekty to ten który pojawi się jako ostatni, czyli ukryje drugi będzie miał depth=-1. GM liczbę minusową traktuje... hmmm... powiedzmy "bardziej priorytetowo"? Gdyż obiekty z depth=-x zawsze są na 'wierzchu' w przeciwieństwie do tych z depth=+x. Chociaż z matematycznego punktu widzenia to liczba +x jest większa niż -x. No cóż, tak GM został zaprogramowany, a tego zmienić się nie da. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 27 Stycznia 2016 Udostępnij Opublikowano 27 Stycznia 2016 Chodzi o to że te z większym depth się pierwsze wyświetlają wobec czego te z mniejszym go przykrywają. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
oLuju Opublikowano 27 Stycznia 2016 Autor Udostępnij Opublikowano 27 Stycznia 2016 OK, już wszystko działa tak jaka chciałem. Jednak zauważyłem bardzo dziwną anomalię: Gdy 1 raz zrobiłem te rysujące się kwadraty (tylko zielone) każdy z nich miał depth=-1 i wszystko działało tak jak powinno. Każdy kwadrat przykrywał wszystko inne, a zduplikowanie tych obiektów i po zmianie na kolor czerwony nagle przestało to działać... Archiwum X ? tylko, że w wersji: Archiwum GM: Return ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 27 Stycznia 2016 Udostępnij Opublikowano 27 Stycznia 2016 Jeżeli obiekty maja ten sam depth to i tak musi być jakoś wybrana ich kolejność. Nie ma takiej możliwości aby wykonał się w tym samym momencie. Ta kolejność to instance order w room. Jeżeli go nie ruszasz to kolejność jest wg tego kiedy powstał obiekt. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
oLuju Opublikowano 27 Stycznia 2016 Autor Udostępnij Opublikowano 27 Stycznia 2016 Sprytnie, dobrze wiedzieć. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę