Skocz do zawartości

Plecak


Dawka83

Rekomendowane odpowiedzi

Mam sobie oto taki kod:

GML (W evencie Left Pressed)
if (point_distance(x,y,hero.x,hero.y)<100 and plecak=false)

{

//Sprawdzamy czy taki item juz jest

for(i=1;i<16;i+=1)

{

if (baza.ido_plecak=2) // Jezeli jest i nie ma max itemkow to sie dodajemy

{

baza.ilosc_plecak+=1;

instance_destroy();

break;

}

}

for(a=1;a<16;a+=1)//Sprawdzamy czy nie ma wolnego miejsca

{

if (baza.ido_plecak[a]=0)

{

x=baza.id_plecak[a].x+16

y=baza.id_plecak[a].y+16

baza.ido_plecak[a]=2

baza.ilosc_plecak[a]=1

id_plecak=a

plecak=true;

depth=-51

break;

}

}

}

 

I teraz obj nie zawsze leci do pierwszej wolnej komórki tylko czasem przeskakuje 2,3 itd. Jak zrobić aby tak nie przeskakiwało?

Odnośnik do komentarza
Udostępnij na innych stronach

Jedyne co mi się nasuwa na myśl to to, że GM aktualizuje zmienne do innych obiektów dopiero po wykonaniu stepu. Czyli linią : baza.ido_plecak[a]=2 wcale nie zmieniasz wartości, ale tylko wysyłasz do GM info o tym, że ma się zmienić, a on to robi pod koniec stepa - jak już drugi item zostanie przydzielony. A może break nie działa jak należy... ma on wychodzić z pętli, czy z kodu? Jeśli z pętli to po dodaniu itemu, kontynuuje kod i dodaje się po raz kolejny (przechodzi do drugiego for). Takie moje przypuszczenia... :)

Odnośnik do komentarza
Udostępnij na innych stronach

wykadziłem coś takiego:

GML
//argument0 rodzaj itemu

for(i=1;i<=10;i+=1)

{

if (baza.iod_plecak=argument0)

{

baza.liczba_plecak+=1;

instance_destroy()

}

else if (i=10)

{

for(i=1;i<=10;i+=1)

{

if (baza.iod_plecak=0)

{

x=view_xview+1.5+16;

if (i=1)

{

y=view_yview+1+16;

}

else

{

y=view_xview+(32*(i-1))+16

}

plecak=true

baza.iod_plecak=argument0

baza.liczba_plecak=1

id_plecak=i

depth=-501

exit;

}

}

}

}

Ale dalej błąd

 

Edit:

Nie wiem jakim cudem ale się naprawiło po dodaniu exit w tej cześci:

GML
baza.liczba_plecak+=1;

instance_destroy()

Odnośnik do komentarza
Udostępnij na innych stronach

Więc to wina break. Przy dodawaniu najpierw zwiększało ilość w jednej komórce. break nic nie dawało, po prostu wychodziło z klamry, z której i tak by wyszło. Potem przechodziło do drugiej for i ponownie dodawało się (w końcu wciąż były wolne miejsca). Po dodaniu exit wychodziło się nie tylko z klamer, ale z całego kodu. Minusem jest tylko to, że nie po przejściu przez exit nie wykona nic więcej z tego klocka

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ę...