Skocz do zawartości

Grafika izometryczna, poruszanie postaci NCP


ammate

Polecane posty

Mam w swoim świecie izometrycznym postacie NCP. Jak na razie postacie stoją w miejscu i nie wygląda to dobrze. Chciałbym zaimplementować jakiś algorytm do poruszania postaciami NCP po mapie. Oczywiście nie trzeba cudów :) wystarczy, żeby co jakiś czas przeszła się z punktu A do punktu B, obróciła się, itp. Może ktoś robił już coś takiego lub zna jakieś materiały w internecie na ten temat?

Link do komentarza
Udostępnij na innych stronach

Mam w swoim świecie izometrycznym postacie NCP. Jak na razie postacie stoją w miejscu i nie wygląda to dobrze. Chciałbym zaimplementować jakiś algorytm do poruszania postaciami NCP po mapie. Oczywiście nie trzeba cudów :) wystarczy, żeby co jakiś czas przeszła się z punktu A do punktu B, obróciła się, itp. Może ktoś robił już coś takiego lub zna jakieś materiały w internecie na ten temat?

Czyli chcesz napisać takie małe AI ?? No cóż :D ja do swojego projektu napisałem taki jeden głupi algorytm, żeby postać chodziła dookoła, a raczej po kwadracie :D Możesz ściągnąć na mojej stronie z Download'u :)

Link do komentarza
Udostępnij na innych stronach

Czyli chcesz napisać takie małe AI ?? No cóż :D ja do swojego projektu napisałem taki jeden głupi algorytm, żeby postać chodziła dookoła, a raczej po kwadracie :D Możesz ściągnąć na mojej stronie z Download'u :)

A ona chodzi non stop czy co jakiś czas? Mi zależy na tym, żeby to wyglądało bardziej naturalnie. Czyli raz postać pójdzie, czasem stanie odwróci się. Zobaczę jak wygląda to u ciebie.

Link do komentarza
Udostępnij na innych stronach

Wg mnie to jest łatwe, nie napisze kodu bo sensu nie ma.

Wystarczy napisać algorytm aby postać przeszła z punktu a do b, a potem zrobić kolejkę, w której kolejkuje się co ma zrobić, takie evnty, gdzie są podane trzy rzeczy: numer czynności, czas kiedy powinna się skończyć, oraz jakiś dodatkowy pomocniczy parametr. I tak: eventy z początków kolejek wrzucasz do jednej globalnej kolejki priorytetowej sortowanej po czasie zakończenia, i co update, ściągasz z nicj te rzeczy, które już się powinny skończyć, jeśli jakaś się kończysz to idziesz do jej NCP-a właściciela (jakaś dodatkowa zmienna w eventice będąca wskaźnikiem na niego) i patrzysz czy ma coś w kolejce (ciągle jeszcze wiesz co było ostatnie) i losujesz patrząc na to co robiła ostatnio, nowe 2-3 eventy. Oprócz tego co update przechodzisz po wszystkich NCP-ach patrzysz jaki mają aktualny evnt i jeśli jest to np. event poruszania, to wiedząc kiedy się skończył a kiedy zaczął możesz obliczyć jego nowe położenie X,Y oraz klatkę animacji. Tak samo innego rodzaj eventy. Oczywiście w trakcie wykonania eventów powinno się patrzeć czy coś się nie zmieniło (coś np. zabarykadowało drogę), jeśli tak to tego eventa się od nowa oblicza, ale wrzuca do kolejki na początek.

 

Tak ja bym to zrobił jakbym pisał rpg-a

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Wg mnie to jest łatwe, nie napisze kodu bo sensu nie ma.

Wystarczy napisać algorytm aby postać przeszła z punktu a do b, a potem zrobić kolejkę, w której kolejkuje się co ma zrobić, takie evnty, gdzie są podane trzy rzeczy: numer czynności, czas kiedy powinna się skończyć, oraz jakiś dodatkowy pomocniczy parametr. I tak: eventy z początków kolejek wrzucasz do jednej globalnej kolejki priorytetowej sortowanej po czasie zakończenia, i co update, ściągasz z nicj te rzeczy, które już się powinny skończyć, jeśli jakaś się kończysz to idziesz do jej NCP-a właściciela (jakaś dodatkowa zmienna w eventice będąca wskaźnikiem na niego) i patrzysz czy ma coś w kolejce (ciągle jeszcze wiesz co było ostatnie) i losujesz patrząc na to co robiła ostatnio, nowe 2-3 eventy. Oprócz tego co update przechodzisz po wszystkich NCP-ach patrzysz jaki mają aktualny evnt i jeśli jest to np. event poruszania, to wiedząc kiedy się skończył a kiedy zaczął możesz obliczyć jego nowe położenie X,Y oraz klatkę animacji. Tak samo innego rodzaj eventy. Oczywiście w trakcie wykonania eventów powinno się patrzeć czy coś się nie zmieniło (coś np. zabarykadowało drogę), jeśli tak to tego eventa się od nowa oblicza, ale wrzuca do kolejki na początek.

 

Tak ja bym to zrobił jakbym pisał rpg-a

O to chodziło, dzięki.

Link do komentarza
Udostępnij na innych stronach

Chciałem aby event był losowany na podstawie tego co właśnie się skończył. Chciałem też zrobić listę 5 ostatnich wykonanych eventów, ale już poziom skomplikowania byłby duży.

Przedefiniowane ścieżki pewnie byłyby lepsze, powinno być coś takiego, że ncp, ma kilka ścieżek, bo tylko w budynkach lub przebywać - chatka, praca, knajpa, świątynia, bazar, i ma zapisane ścieżki, skąd dokąd jak dojść, i np. że o 23, Bóg wie gdzie jest, ale ma iść teraz do chatki, a od pn do pt o 8 w pracy, w nd o 12 w świątyni. Ale to już moce by zżerało no o samego główkowania by było dużo:)

 

Edit:

Tutaj powinno się podzielić zachowania na mikro i makro. Makro to takie, że są ścieżki przedefiniowane na duży dystans. A mikro to lista możliwych eventów już w danym miejscu, gdzie można je nawet losować, np. w barze- picie, zaczepianie, podrywanie, spanie na podłodze, budzenie śpiącego na podłodze. Ilość opcji jest duża a algorytm wyszukiwanie ścieżki w barze, byłby szybki bo bar jest mały. A jak chcemy iść z baru do domu, to szukam BFS-em jak dojść z dowolnego miejsca baru do niewidocznego hot-pointa, który jest w bazarze, a z każdego hotpointa jest już gotowa ścieżka do innego ho-pointa, i jak chcemy dojść z podłogi w barze do łózka w chatce to robimy tak: szukamy hot-pointa w barze, idziemy do niego, pobieramy z niego info jak dojść do hotpointa w chatce, idziemy do tego hotpointa, jak dojdziemy to robimy BFS aby znaleźć, łóżko, idziemy do niego, kładziemy się. A jeśli NCP ma unormowany dzień, to można go w pliku zapisać, i jak gracz nie widział NCP-a przez cały dzień to się nie oblicza co robi NCP, tylko jak gracz sobie idzie, to się sprawdza czy NCP gdzieś tu nie powinien być i się oblicza gdzie teraz jest i co robi.

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...