Skocz do zawartości

Patche, Poruszanie się zwierzecia


Rekomendowane odpowiedzi

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

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

Paths, a nie Patche D:

Odnośnik do komentarza
Udostępnij na innych stronach

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

  • Administratorzy

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

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

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