Skocz do zawartości

del_obj()


Rekomendowane odpowiedzi

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...