XxMichałxX Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 Jeszcze raz piszę bo ostatnio nikt nie pomógł: Mam sobie swój system obiektów do mojego programu Easy Outline Maker (są to punkty, linie i inne figury geometryczne). Obiekty są złożone tak: obj[id,wartosc] Mam teraz taki skrypt żeby usunąc obiekt o danym id (del_obj()): GML var _td; _td=argument0; if objnum<_td { return 0; } else { if objnum=_td objnum-=1; else { for(i=_td; i<=objnum; i+=1) { if i=objnum break; obj[i,type]=obj[i+1,type]; obj[i,x1]=obj[i+1,x1]; obj[i,y1]=obj[i+1,y1]; obj[i,x2]=obj[i+1,x2]; obj[i,y2]=obj[i+1,y2]; obj[i,name]=obj[i+1,name]; obj[i,idd]=obj[i+1,idd]; obj[i,chck]=obj[i+1,chck]; objnum-=1; } return 1; } } Usuwam jakiś obiekt - usuwa się inny, lub żaden się nie usuwa, lub ileś się usuwa.. :( Co tu jest źle? Analizowałem setki razy i wszystko powinno działać. Ew. niech mi ktoś po swojemu napisze jak nie wyczai co źle. Z góry thx Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 19 Czerwca 2009 Udostępnij Opublikowano 19 Czerwca 2009 Po kolei: if objnum=_td objnum-=1; Nie trzeba wyodrębniać tego przypadku, można go zawrzeć w pętli. if i=objnum break; Na cholerę ci to? Można po prostu warunek zmienić na i<objnum To na razie błędy czysto estetyczne. A błąd w działaniu chyba tkwi w tym: objnum-=1; Liczbę obiektów musisz zmieniać po przepisaniu wszystkich komórek, a nie po każdej jeden komórce. Musisz tę wartość zmniejszyć tylko raz. Poprawny kod powinien wyglądać chyba tak: GML var _td; _td=argument0; if objnum<_td { return 0; } else { for(i=_td; i<objnum; i+=1) { obj[i,type]=obj[i+1,type]; obj[i,x1]=obj[i+1,x1]; obj[i,y1]=obj[i+1,y1]; obj[i,x2]=obj[i+1,x2]; obj[i,y2]=obj[i+1,y2]; obj[i,name]=obj[i+1,name]; obj[i,idd]=obj[i+1,idd]; obj[i,chck]=obj[i+1,chck]; } objnum-=1; return 1; } Nie będę już się rozpisywał na temat wydajności zastosowanego algorytmu. :P Nie sprawdzałem kodu, ale chyba powinien działać. 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ę