Skocz do zawartości

Najbliższy, ale o konkretnych właściwościach


Raqe

Rekomendowane odpowiedzi

Witam!

Kolejny raz ja, kolejny problem ;p

 

Tym razem chodzi o jedną grupę obiektów (będących itemkami) skupionych w jednym parencie. Posiadają one ważną zmienną określającą ich egzystencję w całej grze, bowiem albo leżą na ziemi, albo są w inwentarzu (t=false v t=true). Chcę znaleźć najbliższy itemek który jednocześnie posiada wartość true. Jest to ważne, ponieważ istnieje szansa że najbliższy jaki zostanie znaleziony będzie miał t=false, a koniecznie potrzebuję t=true. Jak czegoś takiego dokonać? Pętla? Zawiłe procedury? Proste rozwiązania?

 

Oczekuję na odpowiedź.

 

Pozdrawiam!

Odnośnik do komentarza
Udostępnij na innych stronach

GML
var _id,odl, odl2;

_id=-1

odl=-1

odl2=-1

with(obj_item){

if(t==true){

other.odl2=point_distance(x,y,other.x,other.y)

if(other.odl==-1){

other._id=id

other.odl=other.odl2

}else{

if(point_distance(x,y,other.x,other.y)<other.odl){

other._id=id

other.odl=other.odl2

}

}

}

}

 

mam glupia klawiature moglem machnac literowki :)

 

nudzi mi się, więc rozpisze.

 

1. tworzysz 3 zmienne, ktore potem ci sie przydadza

_id to id najblizszej instancji ze zmienna

odl to odleglosc do tegóż obiektu

odl2 to juz calkiem pomocnicza zeby 2 razy nie sprawdzac point_distance

 

2. przelatujesz wszystkie instancje itemow i albo sprawdzasz, czy jeszcze nie sprawdzales(if(odl==-1)) albo czy odleglosc od przelatywanego jest mniejsza od najblizszego aktualnego i jesli to sie zgadza to nadpisujesz najblizszy

 

3. _id to id najblizszego ze zmienna! :D

Odnośnik do komentarza
Udostępnij na innych stronach

Wszyściutko działa, tylko mam problem bo nie zawsze ten item istnieje, a widzę że instance_exists nie pomaga zbytnio... chyba że czegoś nie ogarnąłem...

 

Mam tak:

Po Twoim kodzie:

if instance_exists(_id) then

{

mozna=true;

}

else

mozna=false;

 

To coś jak amunicja, w końcu się wyczerpie. Chodzi o to że klikam "guziczek" i jeden itemek z inwentarza (o skromnej budowie) mi wypada i zmienia się w inny. W końcu nie będzie miało co się zmienic ;p a tu wciąż wypada :D

 

EDIT:

Nawet trochę inaczej, gdy nie ma żadnego itemu na mapie to i owszem wszystko gra, ale jak chociaż jeden leży na ziemi, to mam nieskończone źródło itemków, bo z inwentarza się usuwa, a z ziemi nie ;p

Odnośnik do komentarza
Udostępnij na innych stronach

_id wwal do create

GML
_id=-1

var _odl, odl2;

odl=-1

odl2=-1

if(instance_exists(obj_item)){

with(obj_item){

if(t==true){

other.odl2=point_distance(x,y,other.x,other.y)

if(other.odl==-1){

other._id=id

other.odl=other.odl2

}else{

if(point_distance(x,y,other.x,other.y)<other.odl){

other._id=id

other.odl=other.odl2

}

}

}

}

}else{

_id=-1

}

 

if(id>-1){zrob cos}

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