orzechyarachidowe Opublikowano 16 Maja 2014 Udostępnij Opublikowano 16 Maja 2014 Witam, jestem nowym użytkownikiem waszego forum jak i Game Maker'a, powoli składam własną grę. Natrafiłem jednak na temat polowań. Chciałbym stworzyć obiekty zwierzęta o banalnej mechanice tzn. chodzi sobie/ je trawkę i kiedy gracz zaczyna go atakować - ten ucieka oczywiście. Stwierdziłem, że samo chodzenie trzeba zrobic na patchach, nie ma innej, lepszej opcji. Jednak nie mogę sobie z tym poradzić, nie potrafię tego używać, czytałem dokumentacje jednak nie potrafię sobie wyobrazić w jaki sposób stworzyć tworzenie ścieżek. Przykład o co mi chodzi : zwierze jest tworzone w punkcie A. Stoi przez 10 sekund po czym jeśli nie ma w pobliżu obiektu kępa trawy tworzy losową ścieżkę (po skosie np.) staje w tym miejscu na 10 sekund, jeśli nie to ponownie szuka kempy trawy i tak się loopuje. Nie proszę was o pełen kod do mojej gry (chociaż nie będę narzekał :P ) tylko o wytłumaczenie, ale najlepiej na podstawie kodu ;D jak zrobić coś takiego. Odrazu mówię, że wyobrażam to sobie w sposób taki, że jest alarm, jeśli po alarmie nie znajdzie obiektu tworzy randomową ścieżkę i loop. Jeśli macie jakieś ciekawsze, bądź wygodniejsze pomysły - wyprowadźcie mnie z błędu :) P.S. Problem dotyczy Game Maker'a 8.1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 16 Maja 2014 Udostępnij Opublikowano 16 Maja 2014 szybki narys jak bym myslal nad sposobem event STEP w o_zwierze : 1, test na czas, by kazdy step nieszukal nowej trasy if (_stary_czas < current_time) {_stary_czas = current_time + _iloscmilisec_do nowego_testu; /*wykonaj punkt 2-3 */} 2, znajdz najblizso trawe _bliska_trawa=instance_nearest(x,y,o_trawa)// id o_trawa da do zmiennej _bliska_trawa 3, jesli o_trawa jest zadaleko if ( distance_to_object(_bliska_trawa) > _max_zaseg_zwierzaka) {/* wykonaj punkty 4-5*/} 4, znajzd trase do trawy(pisze to z glowy, tak trza poczytac o mp_potential_path_object i dostosowac) _trasa=mp_potential_path_object(path,xg,yg,stepsize,factor,obj) // zrobi nowy path do trawy i da do zmiennej _trasa 5, start path path_start(path,speed,endaction,absolute) zwlascza 4 i 5 trzeba sobie porzodnie dorobic, ale cale to pokazuje sposob, czego by mozna uzyc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Maja 2014 Udostępnij Opublikowano 18 Maja 2014 Paths, a nie Patche D: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
orzechyarachidowe Opublikowano 19 Maja 2014 Autor Udostępnij Opublikowano 19 Maja 2014 Przepraszam, ale jeszcze nie doszedłem do siebie po weekendzie. Rozumiem, że _bliska_trawa oraz _trasa to zmienne w o_zwierze, nie powinienem ich najpierw ustanowić w evencie create ? I czy mógłby mi ktoś wytłumaczyć 1. punkt, czasy to jak dla mnie narazie czarna magia, chociaż powoli zaczynam łapać alarmy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 19 Maja 2014 Administratorzy Udostępnij Opublikowano 19 Maja 2014 No tu za dużo nie ma do tłumaczenia, bo current_time to czas od startu gry w milisekundach. Milisekunda to 1/1000 sekundy, zatem 1000 milisekund daje sekundę tak jak 1000 mililitrów dale litr, a 1000 milimetrów daje metr. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 19 Maja 2014 Udostępnij Opublikowano 19 Maja 2014 kazde zwierze szuka trawe, dlatego v kazdym o_zwierze powinen byc kod dla szukania trawy o_nazew jest object_nazew _bliska_trawa to me zmienna a trza ich "napelnic" przed uzyciem v punktu 2 jest _bliska_trawa= id blizsej instancji trawy(objectu v roomu) jezeli _bliska_trawa niebedzie wczesniej testowana to nietrzeba jej miec v create. ale _max_zaseg_zwierzaka powinen byc v create definowany(dostac wartosc) powinenes sam odgadnoc kiedy trzeba definowac zmienno v CREATE. przewaznie tak bywa kiedy jest definovana tylko raz. 1, gnysiek podal podklady, ja wytlumacze princip najpierw dam do _stary_czas v create =0 1a, potem v step testuje jesli _stary_czas jest > niz current_time. pierwzsy raz to bedzie jesli 0>current_time a current_time jest duza licba. test jest true a wykona sie 1b, (jak by test byl false to wykona sie 1c,) 1b, jesli 1a bylo true, wtedy doda do current_time + _iloscmilisec_do nowego_testu i wlozy wynik do zmiennej _stary_czas a zaraz wykona test na trawe 2-3 1c, jesli 1a bylo false to w nastepnem cyklu step jest _stary_czas wiekzy niz current_time o _iloscmilisec_do nowego_testu-1(dlatego ze current_time sie samo zwieksza) i z kazdym cyklem ten odstep sie zmiejsza, ale if niejest prawdziwe i sie niewykonalo calkiem proste 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ę