XxMichałxX Opublikowano 6 Maja 2009 Udostępnij Opublikowano 6 Maja 2009 Ostatnio ktoś dawał na forum jakiś skrypt - instance_nearest_ext, ale nie był on wydajny - wręcz przeciwnie, toteż postanowiłem zrobić swój, bardziej wydajny no i zrobiłem :P Najpierw powiem dla początkujących w ogóle do czego ta funkcja sluzy: instance_nearest(x,y,obj) (ktory jest wbudowany do gm-a) zwraca id najblizszego danego obiektu z danego x i y. Ja zrobiłem taki sam skrypt, z tym że mozna wybrac np drugi najblizszy obiekt albo trzeci, czwarty, piąty itd. instance_nearest_ext GML /* Argument 0 - Obiekt Argument 1 - Ktory Arguemnt 2 - Z ktorego x Argument 3 - Z ktorego y */ var tab,obj,kth,nxt,xn,yn; xn=argument2 yn=argument3 nxt=1 tab=0 obj=argument0 kth=argument1 if kth<=0 or kth>instance_number(obj) { nxt=0 } if nxt { for(i=0; i<kth; i+=1) { tab=instance_nearest(xn,yn,obj) if i!=kth instance_deactivate_object(tab) } instance_activate_object(obj) return tab; } else { return false; } Enjoy :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 6 Maja 2009 Udostępnij Opublikowano 6 Maja 2009 Pokazałem Ci kod na szukanie n-tej instancji, w jednym z Twoich tematów - kredki się należą :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 6 Maja 2009 Udostępnij Opublikowano 6 Maja 2009 Żebyś miał zajęcie: Co wtedy, gdy mam nieaktywną jakąś instancję i nie chcę jej aktywować? Skrypt tak czy inaczej zaktywuje mi wszystkie instancje tego typu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 6 Maja 2009 Udostępnij Opublikowano 6 Maja 2009 Po 1. Nobody już podał wadę. A po 2. To nie szpań tak - jedynie przepisałeś to, co powiedział PsichiX na pętlę :3 Co do tamtego kodu - sam uważam, iż jest on niewydajny, ale za chwilę to dokładniej sprawdzę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 6 Maja 2009 Udostępnij Opublikowano 6 Maja 2009 tak w ogóle to w razie błędu czy nie udanego wyniku funkcja ma zwracać noone a nie false ;/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 6 Maja 2009 Autor Udostępnij Opublikowano 6 Maja 2009 PsichiX nie przypominam sobie zebys mi cos podawal związanego z tym. Poprostu sobie usiadlem i od zera zrobilem, do niczego nie patrząc. A wade chciałem naprawic ale cos nie wyszlo .. why? GML /* Argument 0 - Obiekt Argument 1 - Ktory Arguemnt 2 - Z ktorego x Argument 3 - Z ktorego y */ var tab,obj,kth,nxt,xn,yn,dea,dei; dei=0 dea=0 xn=argument2 yn=argument3 nxt=1 tab=0 obj=argument0 kth=argument1 if kth<=0 or kth>instance_number(obj) { nxt=0 } if nxt { for(i=0; i<kth; i+=1) { if i=kth { tab=instance_nearest(xn,yn,obj) } else { dea=instance_nearest(xn,yn,obj) instance_deactivate_object(dea) dei+=1 } } for(i=0; i<dei; i+=1) { instance_activate_object(dea) } return tab; } else { return noone; } P.S. - A po 2. To nie szpań tak - jedynie przepisałeś to, co powiedział PsichiX na pętlę :3 Tak jak wyzej - niczego nie przepisywałem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Maja 2009 Administratorzy Udostępnij Opublikowano 6 Maja 2009 Hmm, a sprawdzaliście co będzie jak szukam 14 obiektu, a są tylko 3 ? Bo nie chce mi się obecnie zagłębiać w kod. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 6 Maja 2009 Udostępnij Opublikowano 6 Maja 2009 Wyniki szybkiego testu: Czas wykonania 2500 razy funkcji na listach z losowymi parametrami (przy dwudziestu interesujących mnie obiektach): ~950ms To co wyżej, tyle, że na deaktywacji: ~300ms Czyli jednak różnica jest. Już teraz nie mam czasu, ale jeszcze dzisiaj chciałbym to sprawdzić - która funkcja zyskuje a która traci na zwiększonej liczbie instancji. Ed: Tak jak wyzej - niczego nie przepisywałemDobrze wiesz, o co mi chodzi. To PsichiX podsunął Ci na sposób, a Ty jedynie przerobiłeś go na funkcję. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 6 Maja 2009 Autor Udostępnij Opublikowano 6 Maja 2009 tak jasne, kurde zawsze jak coś zrobie to gadacie ze od kazdego spisywałem, ściągałem i Bóg wie co jeszcze. przeciez jakbym od kogos spisywał to bym cholera jasna powiedział! nie jestem taki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 6 Maja 2009 Udostępnij Opublikowano 6 Maja 2009 Jest tylko jedna rzecz nie mająca końca - ludzka głupota. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 6 Maja 2009 Udostępnij Opublikowano 6 Maja 2009 ale nie był on wydajny - wręcz przeciwnie Czyli był wydajny :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 7 Maja 2009 Udostępnij Opublikowano 7 Maja 2009 tak jasne, kurde zawsze jak coś zrobie to gadacie ze od kazdego spisywałem, ściągałem i Bóg wie co jeszcze. przeciez jakbym od kogos spisywał to bym cholera jasna powiedział! nie jestem taki. https://forum.gmclan.org/index.php?showtopi...st&p=240958 I nie udawaj, bo obaj dobrze wiemy, że Twój skrypt działa dokładnie tak, jak PsichiX napisał - ty użyłeś jego pomysłu i na jego podstawie napisałeś swój skrypt. O, inaczej - sam nie wpadłeś na pomysł z dezaktywacją instancji. Ale dobra, niczego sobie wzajemnie nie udowodnimy, także sprzeczka nie ma sensu :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 7 Maja 2009 Udostępnij Opublikowano 7 Maja 2009 @Kofel - Nie był on wydajny, wręcz przeciwnie - mulił na maksa. Jakiś błąd? Dawidds, ale ameryki to YXE nie odkrył, no ale w sumie to jego pomysł ;P . Ten co podałeś w tym temacie to napisanie tej funkcji od zera no i powiększenie jej możliwości. Jest tam jeden głupi błąd - tworzenie dwóch map. To najgorsze co być może. 4000 map tworzonym co stepa i kasowanych to katastrofa :o . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Maximal Opublikowano 7 Maja 2009 Udostępnij Opublikowano 7 Maja 2009 Generalnie nie jest źle, ale: brak zabezpieczenia przed podaniem n większego niż liczba istniejących instancji aktywowanie wszystkich instancji danego typu po zakończeniu obliczeń (a nie tylko tych, które poprzednio dezaktywowaliśmy) Moja wersja algorytmu: GML //================================= // Instance_Nearest( x, y, obj, n ) //================================= X = argument0; Y = argument1; Obj = argument2; n = argument3; if ( n > instance_number( Obj )) return noone; Ids = ds_list_create(); for (i = 0; i < n; i += 1) { Id = instance_nearest( X, Y, Obj ); instance_deactivate_object( Id ); ds_list_add( Ids, Id ); } for (i = 0; i < ds_list_size( Ids ); i += 1) instance_activate_object( ds_list_find_value( Ids, i ) ); ds_list_destroy( Ids ); return Id; 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ę