Skocz do zawartości

Wyłapywanie random object


alwin

Rekomendowane odpowiedzi

Robię sobie tower defensa. No i powiedzmy że idzie nowa runda- wrogowie pojawiają się i pedzą po pathu co sekundę. Jak mam wyłapać z tego grona wrogów jednego(obojetnie którego) i np. zwolnić jego prędkość o 1. Za 3 sekundy kolejne losowanie i łapanie kolejnego(ale nie może to być ten złapany wcześniej)

Nie mogę sobie poradzić:/

Odnośnik do komentarza
Udostępnij na innych stronach

stablicować? Zrobiłem tak -

GML
if(global.siec_firewall = true){

 

if(okay = true){

 

object = obj_bug_parent //poszukiwnay/liczony obiekt

for ( i = 0; i < instance_number( object ) ; i += 1 )

{

id_ = instance_find( object, i );

 

if(id_.effect == false){

id_.effect = true;

id_.path_speed-=2;

okay = false;

 

alarm[0] = 120; // tam okay = true

 

}

 

}

 

 

}

 

}

 

Ale łapie mi wszytskich jacy się pojawią na planszy.. Może ten kod da rade w łatwy sposób edytować? Walczę ale nie wiem juz sam..

Odnośnik do komentarza
Udostępnij na innych stronach

Dodaj break w tym fragmencie:

GML
id_.effect = true;

id_.path_speed-=2;

okay = false;

break;

 

EDIT: Spóźniony. :(

 

Z tym, że to ci nie będzie losować. Będzie ci ich wybierać w takiej kolejności jakiej find ich ma. Czy prawdopodobnie w kolejności w jakiej byli tworzeni.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki. W czasie kiedy czekałem zrobiłem tak -

GML
los = irandom(instance_number(obj_bug_parent ))

los2 = instance_find( obj_bug_parent, los )

los2.path_speed-=2;

okay = false;

 

alarm[0] = 120;

 

Czy to mi losuje czy tak samo bierze po kolei? O chyba losuje:) tylko błędy czasami wyskakują że zmienna path_speed nieustalona...

Odnośnik do komentarza
Udostępnij na innych stronach

Ale też źle. Bo ci może za każdym razem wylosować tego z efektem i żadnego nowego ci nie da. W takiej sytuacji musisz dać zamiast for to nieskończonego while'a.

Będzie ci losowało i losowało dopóki nie wylosuje takiego bez efektu.

Odnośnik do komentarza
Udostępnij na innych stronach

A dałbys radę na szybko skonstruować takiego whila?

 

A taka konstrukcja? Chyba daje radę:)

GML
los = irandom(instance_number(obj_bug_parent ))

los2 = instance_find( obj_bug_parent,los)

 

if(instance_exists(los2))&& los2.effect == false

{

los2.effect = true;

los2.path_speed-=2;

}

 

okay = false;

alarm[0] = 120;

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if(global.siec_firewall = true){

 

if(okay = true){

 

object = obj_bug_parent //poszukiwnay/liczony obiekt

while(true)

{

los = irandom(instance_number(obj_bug_parent ));

id_ = instance_find( object, los );

 

if(id_.effect == false){

id_.effect = true;

id_.path_speed-=2;

okay = false;

 

alarm[0] = 120; // tam okay = true

break;

}

 

}

 

 

}

 

}

 

 

Tylko co powinno się dziać jeśli każdy ma już efekt? Taka sytuacja może zaistnieć? Bo wtedy się zawiesi szukając w nieskończoność tego bez efektu.

Odnośnik do komentarza
Udostępnij na innych stronach

Tego nie przemyślałem.. może po prostu zrobić aby ten firewall przestał działać(czyli przerwanie pętli?)

ps Czemu czasami przy liczeniu wywala błąd?

GML
ERROR in

action number 4

of Step Event

for object obj_system:

 

Error in code at line 17:

if(id_.effect == false){

^

at position 9: Unknown variable effect

 

jak może być unknown skoro w create obj_bug_parent ma effect = false?

Odnośnik do komentarza
Udostępnij na innych stronach

los = irandom(instance_number(obj_bug_parent ))-1;

find oczekuje liczby z przedziału od zero do ilość-1. A instance_number zwraca ilość czyli losujesz od 1 do ilość.

Przez to gdy wylosowana była wartość maksymalna to ci find musiał sięgać do 0 jakiegoś kolejnego obiektu prawdopodobnie.

 

Co do przypadku w którym wszyscy mają już efekt to zrób licznik globalny ilu gostków ma efekt i daj do while warunek, żeby to robił tylko jeśli licznik mniejszy od ilości.

EDIT:

Sprawdź jeszcze lepiej czy irandom losuje od 0 do x czy od 1 do x.

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