KlivenPL Opublikowano 2 Stycznia 2014 Udostępnij Opublikowano 2 Stycznia 2014 Witam, chcę, aby zasłaniany obiekt był automatycznie deaktywowany, a gdy się go odsłoni automatycznie aktywowany. Niestety mam kilkaset takich obiektow, i wszystkie się deaktywują i aktywują razem Jak odnieść się do danego obiektu? (Może odwołać się do ID, ale jak?) Mam coś takiego: GML if place_meeting(x,y,obj_klocki) or place_meeting(x,y,obj_klocki_jasne) { instance_deactivate_object(obj_klocki_tla); } else if !place_meeting(x,y,obj_klocki) or !place_meeting(x,y,obj_klocki_jasne) { instance_activate_object(obj_klocki_tla); } Bardzo proszę o pomoc. PS. Dodam jeszcze, ze ten skrypt mam w obiekcie-matce, do ktorej parentowane sa inne obiekty. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 2 Stycznia 2014 Udostępnij Opublikowano 2 Stycznia 2014 Problem jest taki że ze dezaktywowanymi obiektami nie możesz sprawdzać kolizji. Opisz lepiej sytuację. Czy obiekty są wyrównane do siatki? Czy poruszają się swobodnie? Czy często się zasłaniają? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KlivenPL Opublikowano 2 Stycznia 2014 Autor Udostępnij Opublikowano 2 Stycznia 2014 te obiekty to tło, za klockami, tło da się rozwalić, już pisałem o tym temat, sam mi odpowiadałeś :) (minecraft 2d) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 2 Stycznia 2014 Udostępnij Opublikowano 2 Stycznia 2014 Po 1 nie dezaktywuj obiektów a instance, bo dezaktywujesz wszystkie instance tego typu (obiektu). Po 2 dezaktywowany instance nie wywołuje eventów więc nie możesz wykonać w nim żadnego kodu. No to być może wystarczy żę zrobisz tak: Stwórz nowy obiekt który będzie kontrolował dezaktywację obiektów GML (Begin Step) instance_activate_all() with(obj_klocki_tla) { if place_meeting(x,y,obj_klocki) or place_meeting(x,y,obj_klocki_jasne) { instance_deactivate_object(id); //id czyli aktualny klocek } } Jeżeli to nie zadziała to będziesz musiał przeiterować przez wszystkie instance używając instance_find() Oczywiście w grze takiego rodzaju jaki robisz to co podałem nie jest zbyt dobrym pomysłem. Powinieneś robić na odwrót: dezaktywować wszystko, aktywować potrzebne obiekty (gracz, kontrolery), aktywować wszystko w zasięgu view, dezaktywować co nie potrzebne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
KlivenPL Opublikowano 3 Stycznia 2014 Autor Udostępnij Opublikowano 3 Stycznia 2014 Po 1 nie dezaktywuj obiektów a instance, bo dezaktywujesz wszystkie instance tego typu (obiektu). Po 2 dezaktywowany instance nie wywołuje eventów więc nie możesz wykonać w nim żadnego kodu. No to być może wystarczy żę zrobisz tak: Stwórz nowy obiekt który będzie kontrolował dezaktywację obiektów GML (Begin Step) instance_activate_all() with(obj_klocki_tla) { if place_meeting(x,y,obj_klocki) or place_meeting(x,y,obj_klocki_jasne) { instance_deactivate_object(id); //id czyli aktualny klocek } } Jeżeli to nie zadziała to będziesz musiał przeiterować przez wszystkie instance używając instance_find() Oczywiście w grze takiego rodzaju jaki robisz to co podałem nie jest zbyt dobrym pomysłem. Powinieneś robić na odwrót: dezaktywować wszystko, aktywować potrzebne obiekty (gracz, kontrolery), aktywować wszystko w zasięgu view, dezaktywować co nie potrzebne. Aha, dzięki, ale czy jest jakiś inny sposób, aby gra się tak nie cięła niż dezaktywowanie klocków i usuwanie ich widzialności? (zrobiłem, że gdy jest kolizja z obiektem, to visible = false;. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 4 Stycznia 2014 Udostępnij Opublikowano 4 Stycznia 2014 Musisz brać pod uwagę ile kodu wykonuje się w każdym step. Jeżeli masz na ekranie 20 obiektów ale każdy ma w sobie pętlę for(i=0;i<100;i+=1) to ten kawałek wykona się 2000 razy! visible = false tylko wyłącza rysowanie, więc reszta kodu cały czas się wykonuje. Jeżeli wykonujesz jakiś kod zależnie od tego jakie bloczki otaczają aktualny, to możesz spróbować updateować ten blok tylko gry jakiś z jego sąsiadów się zmienił. Tak robi Minecraft. Optymalizacja nie jest prosta i nie ma gotowych przepisów. Trzeba się wszystkiego samemu nauczyć i kombinować, bo to co pomoże w jednej sytuacji w drugiej okaże się totalną klapą. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 4 Stycznia 2014 Udostępnij Opublikowano 4 Stycznia 2014 nieczytalem dokladnie o co ci chodzi(i niechce sie teraz domyslac), ale dle dalszych postow proponuje pomyslec nad algorytmem ktory by: - testowal caly screen z 1 instancji, ale tylko 1x . mozna wtedy cesto podzielic screen na segmenty ktore nietrza testowac i jesce zmiejsyc czas wykonywania kodu - niezawse jest powinny deaktiwowac instancje. -- jezeli jej nietrzeba to destroy -- jezeli ma sie znow pojawic to visible=false lub zmiana depth zamiast deaktivate - jezeli skryty blok ma byc tlo, to dlaczego go niewytwarzac az w dobie zniscenia bloku ktory go zaslanial? mozna tu uzyc file_ -- mozna wtedy pomyslec o wirtualnych testach. kody blokow so v datowej strukturze i testy tylko liczo id z tej struktury, nietrza vogule testowac instancje jezeli bedzies chciec miec swiat 50000x50000 blokow to cos takiego bedzie trza :thumbsup: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 4 Stycznia 2014 Udostępnij Opublikowano 4 Stycznia 2014 jezeli ma sie znow pojawic to visible=false lub zmiana depth zamiast deaktivate ale visible wyłącza wykonywanie eventu Draw a zmiana depth nic nie da oprócz zmiany kolejności. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 4 Stycznia 2014 Udostępnij Opublikowano 4 Stycznia 2014 ale visible wyłącza wykonywanie eventu Draw a zmiana depth nic nie da oprócz zmiany kolejności.tak, wiem i sugeruje, ze mozna pomyslec o innym rozwiozaniu niz deaktywacja za kazdo cene. tym niemowie ze deaktywacja jest zla, tylko musi sobie dobrze pokombinowac co i jak. 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ę