alwin Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
Roki Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 GML with(objWrog) { if irandom(5) = 1 { zwolnij exit; } } Nie zawsze znajdzie się wróg który zostanie spowolniony :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 Możesz sobie stablicować tych wrogów i losować komórki tablicy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 26 Grudnia 2010 Autor Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
Roki Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 W pętli po zastosowaniu efektu daj: GML break; albo GML exit; Sam nie wiem które, ale to zakończy wykonywanie się pętli :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
alwin Opublikowano 26 Grudnia 2010 Autor Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
Roki Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 Losuje :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
alwin Opublikowano 26 Grudnia 2010 Autor Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
Platyna Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
alwin Opublikowano 26 Grudnia 2010 Autor Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
Roki Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 Może variable nie zdąży się zainicjować? Sprawdzaj czy w danym obiekcie istnieje dany variable, jeśli tak, pobieraj jego wartość, jeśli nie, ustawiaj na false :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 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 Więcej opcji udostępniania...
Dawidds Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 Od 0 do x, i wsyzstko jasne :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 26 Grudnia 2010 Autor Udostępnij Opublikowano 26 Grudnia 2010 Własnie chyba nie-e :unsure: Czyli mam dać -1? Tak jak Platyna pokazał? Mi to nic nie pomaga.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 Czyli masz dać te -1 inaczej: los = irandom(instance_number(obj_bug_parent )-1); Teraz się będzie losować od 0 do ilość-1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 26 Grudnia 2010 Udostępnij Opublikowano 26 Grudnia 2010 irandom od zera losuje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 26 Grudnia 2010 Autor Udostępnij Opublikowano 26 Grudnia 2010 Świtnie, działa:) Zawsze byłem dupa z matmy, przez to mam problemy z tymi liczbami wszytkimi. Ehh.. Dzięki, zaraz będę działał z tą globalną liczbą bugów z efektem. 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ę