TO_mek Opublikowano 28 Stycznia 2011 Udostępnij Opublikowano 28 Stycznia 2011 Witam! Załóżmy że zmienna "zmienna" jest globalna. Czy jak wpisze w jednym obiekcie w step zmienna=0 i w tym samym obiekcie w evencie kolizji z innym obiektem zmienna=1 to czy wykona mi się kod w step jeśli wpisze w nim na samym końcu if zmienna == 1 then wykonaj_costam()? Pewnie nie bo w tym samym kroku w stepie nadaje zmiennej 0 i oczekuje ze będzie miała za chwile 1 z kolizji. To inaczej, potrzebuje by w momencie gdy jest kolizja, "zmienna" była równa 1 i wykonywał się kod w step ale w momencie gdy już kolizji nie będzie to "zmienna" powracała do wartości 0. Powyższy przykład w step odpada bo na logikę nigdy się nie wykona. W momencie kolizji nadanie zmiennej wartości 1 to nie problem ale jak mam wykryć brak tej kolizji i nadawać ponownie wartość 0? Kolizje wykrywam poprzez dodanie AddEvent->Collision z wybranym obiektem a następnie dodaje kod i w nim w kodzie wpisuje zmienna:=1;, obiekty na razie nie są solid. EDIT: Ok sprawdziłem, że powyższy sposób nie zadziała ale w momencie gdy w step wpisałem najpierw warunek if zmienna==1 then costam a dopiero w kolejnej linii zmienna:=0; to wtedy warunek jest wykonywany. Czyli wychodzi na to, że najpierw leci step obiektu a potem leci kolizja która nadaje wartość 1 i w następnym przejściu w step na dzień dobry mamy wartość 1 i wykonuje warunek a dopiero potem nadaje zmiennej 0. No ok to to mniej więcej działa (z opóźnieniem jednego kroku) ale co w przypadku gdy: kolizja wykrywana będzie w obiekcie1 a warunek postawiony w zupełnie innym obiekcie? Jak tutaj wygląda wykonywanie eventów? Czy najpierw wykonywane są wszystkie warunki jednego typu dla wszystkich obiektow, później kolejne eventy wszystkich obiektow itd. czy najpierw leci cały obiekt ze wszystkimi eventami, potem następny obiekt itd.? No i co decyduje o kolejności wykonywania zdarzeń w danych obiektach tzn. który obiekt wykonuje działania jako pierwszy? Czy to leci wg depth (a co jak obiekty mają tą samą wartość depth) czy może wg tego w jakiej kolejności są definiowane obiekty w edytorze albo w jakiej kolejności są utworzone w grze (no to jak tak to znowu pytanie co leci pierwsze czy obiekty zdefiniowane na roomie już w edytorze czy może w evencie create rooma albo jak)? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 28 Stycznia 2011 Udostępnij Opublikowano 28 Stycznia 2011 Step -> End Step. Wpisany tam kod wykona się po Stepie i po kolizji, ale przed Drawem. E: nie ma tak, że najpierw jeden obiekt wykona wszystkie eventy, potem drugi obiekt, trzeci itd. Najpierw wszystkie obiekty, po kolei (poczynając od tego z najmniejszym id, czyli tego stworzonego jako pierwszy) wykonają jeden event, potem po kolei drugi, trzeci itd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 28 Stycznia 2011 Udostępnij Opublikowano 28 Stycznia 2011 To powinno rozwiać twoje wątpliwości co do wykonywania kolejności kodu w GMie: kolejność wykonywania eventów EDIT: No i co decyduje o kolejności wykonywania zdarzeń w danych obiektach tzn. który obiekt wykonuje działania jako pierwszy? Czy to leci wg depth (a co jak obiekty mają tą samą wartość depth) czy może wg tego w jakiej kolejności są definiowane obiekty w edytorze albo w jakiej kolejności są utworzone w grze (no to jak tak to znowu pytanie co leci pierwsze czy obiekty zdefiniowane na roomie już w edytorze czy może w evencie create rooma albo jak)? kolejność jest chyba ustala przez id instancji rosnąco ale tego nie sprawdzałem więc to tylko przypuszczenie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 28 Stycznia 2011 Autor Udostępnij Opublikowano 28 Stycznia 2011 Step -> End Step. Wpisany tam kod wykona się po Stepie i po kolizji, ale przed Drawem. Faktycznie tak działa. Tylko jestem trochę zaskoczony bo już wielokrotnie spotkałem się z opinią że eventy wykonują się w tej kolejności w jakiej pojawiają się w oknie Events: (nieważne co się pierwsze wybierze to i tak kolejność w jakiej ułożą się eventy jest stała). A tutaj event EndStep układa się zaraz PO step ale PRZED kolizjami co obala powyższą teorię! No ale dalej mam dylemat jak to zadziała gdy wiele obiektów będzie odwoływać się do tej samej zmiennej globalnej - czy najpierw lecą wszystkie step potem wszystkie kolizje a potem wszystkie endstep czy leca po kolei "całe" obiekty po obiekcie. No i w jakiej kolejności? A może w steep dać kod sprawdzający kolizje w danym momencie i bezpośrednio po tym wykonać działanie? Tylko że te funkcje (place_meeting(x,y,obj) czy collision_point(x,y,obj,prec,notme)) sprawdzają kolizje punktowo (origin) a to mnie za bardzo nie urządza bo mój obiekt (który by sprawdzał kolizje z innymi obiektami) jest dosyć niekształtny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 28 Stycznia 2011 Udostępnij Opublikowano 28 Stycznia 2011 Co do funkcji sprawdzających kolizje, możesz użyć place_free i place_empty. czy najpierw lecą wszystkie step potem wszystkie kolizje a potem wszystkie endstep czy leca po kolei "całe" obiekty po obiekcie. No i w jakiej kolejności? Najpierw wszystkie Step, potem kolizje, potem End Step. HuderLord podał kolejność. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 28 Stycznia 2011 Udostępnij Opublikowano 28 Stycznia 2011 Ok drugi test: tym razem z uwzględnieniem paru instancji jednego obiektu. kolejność eventów 2 I wychodzi na to że eventy są pogrupowane tzn. zanim wykona się następny typ eventu to najpierw wszystkie instancje zgodnie z ich rosnącym id wykonują aktualny typ eventu. zamieszanie jest tylko z eventem create a object creation. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 28 Stycznia 2011 Administratorzy Udostępnij Opublikowano 28 Stycznia 2011 https://forum.gmclan.org/index.php?showtopic=9989 - na dole pierwszego postu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 29 Stycznia 2011 Autor Udostępnij Opublikowano 29 Stycznia 2011 Ok drugi test: tym razem z uwzględnieniem paru instancji jednego obiektu. kolejność eventów 2 I wychodzi na to że eventy są pogrupowane tzn. zanim wykona się następny typ eventu to najpierw wszystkie instancje zgodnie z ich rosnącym id wykonują aktualny typ eventu. zamieszanie jest tylko z eventem create a object creation. create w kolejnosci w jakiej sa tworzone obiekty na roomie (ale nie jak w edytorze) draw j.w. begin step - grupuje i wykonuje kopie obiektu ALE WCALE NIE TE O najnizszym ID (TE CO BYLY PIERWSZE W CREATE) ale te co byly pierwsze utworzone w edytorze a potem kolejne obiekty innego typu i jego kopie itd. - u mnie obiekt nr 1 wykonuje sie pierwszy! a utworzony byl w edytorze jako pierwszy ale w create jako drugi (majacy ID wyzszy o 1 od najnizsego) oraz obiekt nr2 utworzony jako drugi w edytorze ale jako pierwszy w create (majacy najnizszy nr ID) step j.w ! kolizje j.w. Masakra. Przy wiekszej ilosci obiektow takze to sie sprawdza czyli decyduje kolejnosc tworzenia obiektow w edytorze. Zmiana kolejnosci obiektwow w edytorze NIE MA WPLYWU na zmiane kolenosci wykonywania (a przy duzej ilosci obiektow zazwyczaj kazdy tworzy sobie podkatalogi na obiekty, usuwa, zamienia, kopiuje itd - i kto by pamietal ktory z tych obiektow byl utworzony w edytorze jako pierwszy!) To jeszcze czy na coś ma wpływ depth. Masakra do kwadratu! Depth ma wpływ ale WYŁĄCZNIE na event DRAW i wyświetla się zawsze grupa obiektów o najwyzszej wartosci depth zaczynajac od najnizszej wartosci ID w danej grupie. No to powodzenia w zapanowaniu nad tym wszystkim :) EDIT: Testowane na GM8 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 29 Stycznia 2011 Autor Udostępnij Opublikowano 29 Stycznia 2011 https://forum.gmclan.org/index.php?showtopic=9989 - na dole pierwszego postu. OK. Kolejność eventów mamy już ustaloną ale tak jak napisałem posta wyżej testy pokazują, że instancje tego samego obiektu, parametr depth oraz kolejność tworzenia obiektu w samym edytorze ma ogromne znaczenie i także jest zupełnie inne w zależności od eventu jakiego dotyczy, więc sprawa kolejności wykonywania zdarzeń wcale nie jest tak płytka jak w tym temacie który przytoczyłeś. Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Stycznia 2011 Udostępnij Opublikowano 29 Stycznia 2011 Parametr depth(ang. "głębokość") dotyczy głębi rysowania. Jeżeli dwie instancje nakładają się na siebie i mają różny depth, wtedy na wierzchu rysowana jest ta, z niższym parametrem depth. Jeżeli mają ten sam depth wtedy o kolejności rysowania decyduje ID, czyli indywidualny numer każdej kolejnej instancji. Na wierzchu pozostaje wtedy "młodsza" instancja. Jak wynika z mojego małego eksperymentu, parametr depth ma ważniejsze, niż ID znaczenie. Zielony został stworzony wcześniej, niż czerwony. Ma więc niższe ID i teoretycznie ustawiona przez niego zmienna globalna "kanapka" na wartość 0 powinna zostać zamieniona na wartość, nadawaną przez czerwony kwadracik. Tymczasem global.kanapka ma wartość 0. Dowodzi to, że kod wykonywany jest najpierw w głębszych warstwach rysowania, czyli tam, gdzie parametr depth ma większą wartość, a następnie w warstwach "bliższych użytkownikowi". Dla niedowiarków: Experyment.gmk (GMClan.org) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
M@ILOSZ Opublikowano 29 Stycznia 2011 Udostępnij Opublikowano 29 Stycznia 2011 @Mentoss: Twój eksperyment nic nie udowadnia, potwierdziłeś tylko to co wszyscy wiedzą. Natomiast nie ma nic wspólnego z kolejnością wykonywania eventów (tzn. nie potwierdza ani nie zaprzecza temu że depth ma wpływ na kolejnośc wykonywania eventa w różnych obiektach) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Stycznia 2011 Udostępnij Opublikowano 29 Stycznia 2011 @M@ILOSZ Twój post za to nie wniósł dosłownie NICZEGO poza wniesieniem, że mój nie wniósł... Z tym za to się nie zgodzę. Mój post uzupełnił informacje dot. parametru depth. Teraz każdy debil (no, może nie każdy) może z łatwością zrozumieć jak go użyć, oraz znaleźć dla niego jakieś ciekawe zastosowanie. Dodatkowo wykazałem, że: OK. Kolejność eventów mamy już ustaloną ale tak jak napisałem posta wyżej testy pokazują, że instancje tego samego obiektu, parametr depth oraz kolejność tworzenia obiektu w samym edytorze ma ogromne znaczenie i także jest zupełnie inne w zależności od eventu jakiego dotyczy, więc sprawa kolejności wykonywania zdarzeń wcale nie jest tak płytka jak w tym temacie który przytoczyłeś. "sprawa kolejności wykonywania wydarzeń" JEST prosta. Najpierw wykonują się beginstepy w kolejności ID w "najdalszych" warstwach. Potem przechodzi przez kolejne warstwy na wierzch, za każdym razem TYLKO beginstepy, za każdym w kolejności ID. Jak już przejdzie przez najbliższą warstwę wykonywany jest kolejny ev., znów zaczynając od najdalszych z najniższymi ID poprzez coraz to niższe depthy kończąc na najbliższym. I tak z każdym ev., wg. kolejności. To jest proste, a każdy z moich postów z osobna wniósł więcej, niż ty, M@iloszu, w całym temacie... A tak. Twoim jedynym postem było nic nie wnoszące stwierdzenie, że mój post nic nie wnosi. Edit: A... stwierdzenie "nie każdy debil" nie miało na celu nikogo obrazić. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 29 Stycznia 2011 Udostępnij Opublikowano 29 Stycznia 2011 Lolmentos, jesteś epicki : D Filozofujesz na siłę, nie żadne magiczne "jeśli się nakładają i mają różny depth to ta z mniejszym narysuje się na tej z większym" i "najpierw wykonują się beginstepy w kolejności id w najdalszych warstwach", tylko po prostu "instancje są sortowane po depthu", i to Ci rozwiązuje wszystkie pytania. Instancje z mniejszym depthem rysują się "wyżej" dlatego, że rysują się później, jeśli mają taki sam depth to "wyżej" narysuje się ta wcześniejsza dlatego, że tylko depth jest wyznacznikiem przy sortowaniu - jeśli depth jest taki sam to dwie instancje nie zmieniają się miejscami -> później utworzone rysują się później. A wszystkie eventy wykonują się w takiej samej kolejności co Draw bo zwyczajnie nie opłaca się zmieniać kolejności rysowania dwa razy na klatkę jak i tak nic by to nie zmieniło. Po to są te wszystkie Beign Stepy Stepy i End Stepy aby po nich rozróżniać kolejność i nie zagłębiać się w to w jakiej kolejności wykonują się eventy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 29 Stycznia 2011 Udostępnij Opublikowano 29 Stycznia 2011 Filozofujesz na siłę, nie żadne magiczne "jeśli się nakładają i mają różny depth to ta z mniejszym narysuje się na tej z większym" i "najpierw wykonują się beginstepy w kolejności id w najdalszych warstwach", tylko po prostu "instancje są sortowane po depthu", i to Ci rozwiązuje wszystkie pytania. Instancje z mniejszym depthem rysują się "wyżej" dlatego, że rysują się później, jeśli mają taki sam depth to "wyżej" narysuje się ta wcześniejsza dlatego, że tylko depth jest wyznacznikiem przy sortowaniu - jeśli depth jest taki sam to dwie instancje nie zmieniają się miejscami -> później utworzone rysują się później. A wszystkie eventy wykonują się w takiej samej kolejności co Draw bo zwyczajnie nie opłaca się zmieniać kolejności rysowania dwa razy na klatkę jak i tak nic by to nie zmieniło. Po to są te wszystkie Beign Stepy Stepy i End Stepy aby po nich rozróżniać kolejność i nie zagłębiać się w to w jakiej kolejności wykonują się eventy Napisał, co wiedział, pociął i pomieszał. Sam jesteś epicki. Mówiąc zwięźle i krótko: Kolejność wykonywania kodu ustalana jest przez(kolejno): Event, Depth, ID; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 30 Stycznia 2011 Autor Udostępnij Opublikowano 30 Stycznia 2011 Napisał, co wiedział, pociął i pomieszał. Sam jesteś epicki. Mówiąc zwięźle i krótko: Kolejność wykonywania kodu ustalana jest przez(kolejno): Event, Depth, ID; Nie do końca bo to zbyt ogólnie powiedziane. Duże znaczenie ma kolejność utworzenia obiektu w edytorze i to jest chyba najpierw brane pod uwagę oczywiście w ramach pewnych eventów (begin step, step, kolizje). Drawem rządzi depth. ID ma wpływ na samym końcu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 30 Stycznia 2011 Udostępnij Opublikowano 30 Stycznia 2011 Kolejność układania obiektów w room edytorze == id Za każdym razem jak stawiasz obiekt to przydziela mu się następne id. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 30 Stycznia 2011 Udostępnij Opublikowano 30 Stycznia 2011 prosty test: wstaw kilkanascie tych samych obiektow do room'u i daj mu w create show_message(id()) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 30 Stycznia 2011 Udostępnij Opublikowano 30 Stycznia 2011 Przecież to można sprawdzić w samym edytorze, najeżdżając po prostu myszką na objecty. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 30 Stycznia 2011 Udostępnij Opublikowano 30 Stycznia 2011 ale teraz wiadomo tez ktorego obiektu kod wykonuje sie najpierw Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TO_mek Opublikowano 31 Stycznia 2011 Autor Udostępnij Opublikowano 31 Stycznia 2011 Kolejność układania obiektów w room edytorze == id Za każdym razem jak stawiasz obiekt to przydziela mu się następne id. Ale kto mówi o room edytorze?! To to samo jak instance_create czyli kolejność tworzenia obiektów na roomie. Mi chodzi o zdefiniowanie (utworzenie definicji obiektu, nadanie mu nazwy) samego obiektu w edytorze GMa. I właśnie ta kolejność decyduje o kolejności o której wspominam wcześniej. Poczytajcie na spokojnie jeszcze raz od początku wszystko. 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ę