Morro Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 Coś próbowałem wyszukiwać, ale nie mogłem znaleźć rozwiązania. A więc, gracz przy uderzaniu tworzy obiekt, który ma za zadanie odebrać hp wrogom. Chciałbym, żeby jeden taki obiekt mógł zmniejszyć to hp tylko raz. Coś kombinowałem z pobieraniem ID obiektu kolizji, mógłbym nawet zrobić to na alarmie (po oberwaniu miałby np. półsekundowe immunity) ale przewiduję wiele tych obiektów atakujących naraz/w krótkich odstępach czasowych co nie spełniłoby moich oczekiwań. Usuwanie obiektu nie wchodzi w grę, bo jednym ciosem powinno być możliwe powalenie wielu wrogów. A więc jak się za to zabrać? tl;dr Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 czyli ma odjac hp wielu wrogom, ale kazdemu tylko raz? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 10 Marca 2012 Autor Udostępnij Opublikowano 10 Marca 2012 Dokładnie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 robisz w create trafionych=-1 a przy trafieniu GML var moge_go_walnac; moge_go_walnac=1 if trafionych>-1{ for(i=0;i<=trafionych;i+=1) if trafiony=if tego co chcesz go walnac{ moge_go_walnac=0 break; } } } if moge_go_walnac{ trafionych+=1 trafiony[trafionych]=id tego co chcesz go walnac } e: sorry, zarżnie sie jak trafionych=-1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 10 Marca 2012 Autor Udostępnij Opublikowano 10 Marca 2012 Analizując ten kod już widzę, że nie będzie zamierzonego efektu. Po pierwsze właśnie chcę się dowiedzieć jak otrzymać ID trafionego obiektu, albo obiektu trafiającego (nawet byłoby lepiej). Wtedy w kolizji sprawdzałbym, czy dany obiekt o takim ID (których będzie wiele) już trafił raz i jeśli nie, odejmowałby hp. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 ID sprawdzasz collision_, place_position Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 10 Marca 2012 Autor Udostępnij Opublikowano 10 Marca 2012 GML var a; a=place_meeting(x,y,o_swing) //for (i=0;i<=10;i+=1) //{ if traf!=a { hp-=1 traf=a } //}</span> Z forem krzaczy Error in code at line 9: if traf!=a ^ at position 9: Unknown variable traf or array index out of bounds Bez fora jak wiadomo odejmuje tylko raz, nie wiem dlaczego wyskakuje ten błąd. Nie wiem w ogóle jak to ugryźć. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 proste, krzaczy, bo nie ma zmiennej(nie zainicjowales jej) dlatego musisz miec zmienna od ilosci trafionych i w forze w drugim arg. jej uzyc GML create: trafionych=-1 trafienie: var a,tak; a=place_meeting(x,y,o_swing) tak=1//czyli czy cie juz trafil, czy nie for (i=0;i<=trafionych;i+=1){ if traf=a{//jesli cie juz trafial tak=0 break; } } if tak{ trafionych+=1 traf[trafionych]=a hp-=1 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 10 Marca 2012 Autor Udostępnij Opublikowano 10 Marca 2012 Zmienna była zadeklarowana, potrafię przeczytać co wysypuje warnlog i właśnie to mnie dziwiło, dlaczego wysypuje GML var a,tak; a=place_meeting(x,y,o_swing) tak=1 for (i=0;i<=trafionych;i+=1) { if traf=a { tak=0 break; } } if tak { trafionych+=1 traf[trafionych]=a hp-=1 } W każdym razie tutaj nie wywala już błędu, problem polega na tym, że hp odejmuje tylko raz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 Zmienna była zadeklarowana, potrafię przeczytać co wysypuje warnlog i właśnie to mnie dziwiło, dlaczego wysypuje masz zadekladowane: traf[0]=1111 traf[1]=1112 a w forze sprawdzasz od 0 do 10, czyli przy 2 juz ci wywali blad :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 10 Marca 2012 Autor Udostępnij Opublikowano 10 Marca 2012 Aa, k łapię. Teraz jak ugryźć problem z odejmowaniem? Podejrzewam, że chodzi o ID Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 ten kod masz w obiekcie trafianym czy trafiajacym? :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 10 Marca 2012 Autor Udostępnij Opublikowano 10 Marca 2012 Trafianym of course. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 sorry za moja niekumatość, ale przeciez chciales zeby jeden atakujacy mogl zaatakowac tylko raz jednego atakowanego Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 10 Marca 2012 Autor Udostępnij Opublikowano 10 Marca 2012 No i tak jest. Tylko jak atakuje więcej razy (też tworzy się ten sam obiekt) to powinien przecież tracić hp za każdym razem, id nowych obiektów chyba jest inne. Dlatego myślę, że problem jest z pobranym ID obiektu. K, sytuacja wygląda tak: atakuję, wróg obrywa, traci hp; atakuję ponownie, wróg obrywa ale nie traci już hp. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 10 Marca 2012 Autor Udostępnij Opublikowano 10 Marca 2012 Ok, przeczytałem, że place_meeting zwraca tylko wartość true albo false. Wystarczyło zmienić GML a=place_meeting(x,y,o_swing) na GML a=collision_point(x,y,o_swing,1,1) i pięknie zwraca ID obiektu (czyli odejmuje hp jak należy) Dzięki wielkie, nie zamykam, może się komuś przyda. 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ę