Threef Opublikowano 6 Kwietnia 2012 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ł?
ediepl Opublikowano 7 Kwietnia 2012 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?
Threef Opublikowano 7 Kwietnia 2012 Autor 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.
ediepl Opublikowano 7 Kwietnia 2012 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.
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ę