Threef Opublikowano 6 Kwietnia 2012 Udostępnij Opublikowano 6 Kwietnia 2012 W PentaSphere świat jest zbudowany z izometrycznych bloków. Dziś wpadłem na pomysł że mogę usunąć/dezaktywować bloki których nie widać/są przykryte innymi blokami. Próbowałem sprawdzać wszystkie bloki o tym samym x i y, i usuwać wszystkie poza tym o najmniejszym depth. GML ///Usuwanie zbędnych (nie widocznych) klocków a_x=ds_list_create() a_y=ds_list_create() for (n=0; n<instance_number(o_block); n+=1) { i=instance_find(o_block,n) if(!ds_list_find_index(a_x,i.x)){ds_list_add(a_x,i.x)} if(!ds_list_find_index(a_y,i.y)){ds_list_add(a_y,i.y)} } for(yy=0;yy<=ds_list_size(a_y);yy+=1) for(xx=0;xx<=ds_list_size(a_x);xx+=1) { a[xx,yy]=ds_list_create() } for (n=0; n<instance_number(o_block); n+=1) { i=instance_find(o_block,n) ds_list_add(a[i.x,i.y],i) } for(yy=0;yy<=ds_list_size(a_y);yy+=1) for(xx=0;xx<=ds_list_size(a_x);xx+=1) { q1=ds_list_find_value(a[xx,yy],0) for(i=1;i<ds_list_size(a[xx,yy]);i+=1) { q2=ds_list_find_value(a[xx,yy],i) if(q1>10000 and q2>10000) if(q1.depth<q2.depth) { with(q1){instance_destroy()} q1=q2 } else {with(q2){instance_destroy()}} } } for(yy=0;yy<=ds_list_size(a_y);yy+=1) for(xx=0;xx<=ds_list_size(a_x);xx+=1) { ds_list_destroy(a[xx,yy]) } Niestety to nie jest dobre rozwiązanie. Ogółem cała mapa jest przechowywana w ten sposób: GML ds_grid_get(h[zz],xx,yy)Więc tak też mogę się odnosić do istniejących bloków. Ktoś ma jakiś pomysł? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 7 Kwietnia 2012 Autor Udostępnij Opublikowano 7 Kwietnia 2012 *bump* Anyone? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 7 Kwietnia 2012 Udostępnij Opublikowano 7 Kwietnia 2012 *Uwaga, pisze z kompa bez polskiej klawiatury, wiec z gory przepraszam za ten post* Pomysl jest dobry, sam o tym myslalem w DP, mozna to zrobic tak: jesli kolidujesz z jakims obiektem sprawdzasz czy jest nad czy pod toba(wedlug depth(jesli taki sam to wedlug id w roomie)) nastepnie sprawdzasz czy zakrywasz go calego(other.x<x itd) (i tu jest problem ze nie wszystkie obiekty sa prostokatami )jesli tak to go usuwasz. BTW: Dlaczego nie jest to dobre rozwiazanie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 7 Kwietnia 2012 Autor Udostępnij Opublikowano 7 Kwietnia 2012 Chodzi mi o to że pomysł jest dobry ale złe wykonanie. Teraz nad tym siedzę i prawie udało mi się to rozgryźć. Mam tylko problemy z rozróżnieniem przezroczystych bloków (Okna etc.). Ogółem zredukowało to liczbę obiektów o prawie 50% :) Edit: GML ds_grid_get(h[zz+1],xx-1,yy-1)Tak sprawdzam czy w strukturze jest jakiś blok ponad aktualnym. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 7 Kwietnia 2012 Udostępnij Opublikowano 7 Kwietnia 2012 Tez nad tym myslalem, i jedyne co mi przyszlo do glowy to sprawdzanie pixel po pixelu czy ma kolizje, w moim przypadku moglo by sie to sprawdzic gdy zapisuje sie plik z mapa w edytorze, ale nie wiem jak u ciebie. 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ę