Dynamicznie dzielic plansze na regiony
Jako, że szukając drogi A* po kafelkach (1 kafel 64x64 składa się z paru kafelków (obecnie 4x4)) zajmuje troszkę za dużo czasu przydałoby się podzielić plansze na regiony aby usprawnić działanie algorytmu.
Z tego co się orientuję przeszkody typu drzewa modyfikują mapę kolizji i zmieniają odpowiednie kafelki na takie, po których nie da się chodzić.
Czyli po wczytaniu mapy (nie uwzględniając dynamicznych obiektów typu potwory) można by wygenerować regiony zawierające odpowiednią ilość (jeszcze nie wiem jaką, pewnie zależną od wielkości mapy) kafli oraz połączenia pomiędzy regionami.
W skrócie zwykły graf. Dzięki temu mógłbym podzielić algorytm szukania drogi na 2 części: jedną po regionach a drugą po kaflach z regionu x do x + 2 (lub celu).
Czy takie podejście waszym zdaniem ma sens?
@Liosan, przypisuję wstępnie to do ciebie abyś zerknął tutaj. Jak możesz daj stosowny komentarz i przypisz ticketa mi. Zajmę się implementacją
Z tego co się orientuję przeszkody typu drzewa modyfikują mapę kolizji i zmieniają odpowiednie kafelki na takie, po których nie da się chodzić.
Czyli po wczytaniu mapy (nie uwzględniając dynamicznych obiektów typu potwory) można by wygenerować regiony zawierające odpowiednią ilość (jeszcze nie wiem jaką, pewnie zależną od wielkości mapy) kafli oraz połączenia pomiędzy regionami.
W skrócie zwykły graf. Dzięki temu mógłbym podzielić algorytm szukania drogi na 2 części: jedną po regionach a drugą po kaflach z regionu x do x + 2 (lub celu).
Czy takie podejście waszym zdaniem ma sens?
@Liosan, przypisuję wstępnie to do ciebie abyś zerknął tutaj. Jak możesz daj stosowny komentarz i przypisz ticketa mi. Zajmę się implementacją
Leave a comment
on 2010-04-28 13:10 *
By Liosan
Assigned to changed from Liosan to DamorK
Assigned to changed from Liosan to DamorK
co to jest w tym pomyśle region? Zbiór kafli, wielokąt, coś innego?
Ogólnie pomysł wydaje się sensowny, ale co z np. beczkami? Beczki blokują przejście, ale można je rozwalać. Można olać problem i stwierdzić, że beczek nie będziemy używać do blokowania przejścia (zawsze bedą "z boczku"), ale pomyśleć można...
DamorK, kiedyś rozmawialiśmy o taki pomyśle; masz coś do dodania?
Ogólnie pomysł wydaje się sensowny, ale co z np. beczkami? Beczki blokują przejście, ale można je rozwalać. Można olać problem i stwierdzić, że beczek nie będziemy używać do blokowania przejścia (zawsze bedą "z boczku"), ale pomyśleć można...
DamorK, kiedyś rozmawialiśmy o taki pomyśle; masz coś do dodania?
Ogólnie to ciężko powiedzieć. Wiadomo, że jakoś zoptymalizować to trzeba, natomiast ciężko przewidzieć na ile to pomoże, bo tych potworów jest dość znaczna ilość. Pewnie zależy to dość mocno od algorytmu do generowania regionów. Był chyba taki pomysł, żeby te regiony rysować w edytorze, natomiast wtedy został on odrzucony z powodu planów losowego generowania map. Może warto to rozważyć?
I po drugie, nie wiem jak to u Ciebie Thyros wygląda, natomiast ja widzę, że tą moją klasę CShortestPaths da się dość niskim kosztem czasowo-wydajnościowym przerobić (z wykorzystaniem Twojej kolejki priorytetowej) żeby szukała nie najkrótszej, ale najszerszej trasy i zwracała także 'szerokość' następnego waypointa. Można by takie coś wykorzystać do tego, żeby liczyć trasę raz dla kilku potworów znajdujących się koło siebie i rozmieszczać je zgodnie ze strategią ataku grupowego w obrębie tego dużego waypointa.
Nie będę decydować, tak tylko daję pod rozwagę, ale ja bym osobiście spróbował podejścia grupowego, bo jest stosunkowo proste do zrealizowania i przetestowania.
I po drugie, nie wiem jak to u Ciebie Thyros wygląda, natomiast ja widzę, że tą moją klasę CShortestPaths da się dość niskim kosztem czasowo-wydajnościowym przerobić (z wykorzystaniem Twojej kolejki priorytetowej) żeby szukała nie najkrótszej, ale najszerszej trasy i zwracała także 'szerokość' następnego waypointa. Można by takie coś wykorzystać do tego, żeby liczyć trasę raz dla kilku potworów znajdujących się koło siebie i rozmieszczać je zgodnie ze strategią ataku grupowego w obrębie tego dużego waypointa.
Nie będę decydować, tak tylko daję pod rozwagę, ale ja bym osobiście spróbował podejścia grupowego, bo jest stosunkowo proste do zrealizowania i przetestowania.
Wstępnie myślałem, aby regiony były zwykłymi kwadratami łączącymi parę (kilkanaście) kafli w jedną całość. Łatwo to zrobić automatycznie, ale nie wiem na ile to pomoże.
W tym podejściu ilość szukań ścieżek się nie zmieni. Zmniejszeniu powinien ulec czas potrzebny na wyszukanie jednej ścieżki.
Jeżeli chodzi o beczki, o których wspominał Liosan to prawdopodobnie da się uaktualnić "połączenia" pomiędzy regionami tak aby po rozwaleniu beczki potwory zorientowały się o "skrócie".
Z drugiej strony natomiast mamy podejście grupowe. Tutaj mielibyśmy jedno wyszukiwanie na grupę potworków. Mielibyśmy więc lidera, który prowadzi grupę i resztę, która podąża za liderem. Z tego co widzę plansze są dość "puste" (nie ma za dużo przeszkód czy labiryntów) więc można zastosować bolidy do takich grupowych ataków. Jeżeli nie odrzucimy bolidy to zawsze możemy zastosować podejście "szyku".
Trzecia opcja to zastosować oba rozwiązania na raz :)
@Liosan, Darmok robiliście coś takiego wcześniej? Widzicie jakieś inne wady/zalety tych podejść?
Osobiście rozpocząłbym od podejścia pierwszego gdyż wydaje mi się, że jeżeli nie będzie to zbawieniem to i tak się przyda oraz jest łatwiejsze w implementacji. Co o tym sądzicie?
W tym podejściu ilość szukań ścieżek się nie zmieni. Zmniejszeniu powinien ulec czas potrzebny na wyszukanie jednej ścieżki.
Jeżeli chodzi o beczki, o których wspominał Liosan to prawdopodobnie da się uaktualnić "połączenia" pomiędzy regionami tak aby po rozwaleniu beczki potwory zorientowały się o "skrócie".
Z drugiej strony natomiast mamy podejście grupowe. Tutaj mielibyśmy jedno wyszukiwanie na grupę potworków. Mielibyśmy więc lidera, który prowadzi grupę i resztę, która podąża za liderem. Z tego co widzę plansze są dość "puste" (nie ma za dużo przeszkód czy labiryntów) więc można zastosować bolidy do takich grupowych ataków. Jeżeli nie odrzucimy bolidy to zawsze możemy zastosować podejście "szyku".
Trzecia opcja to zastosować oba rozwiązania na raz :)
@Liosan, Darmok robiliście coś takiego wcześniej? Widzicie jakieś inne wady/zalety tych podejść?
Osobiście rozpocząłbym od podejścia pierwszego gdyż wydaje mi się, że jeżeli nie będzie to zbawieniem to i tak się przyda oraz jest łatwiejsze w implementacji. Co o tym sądzicie?
on 2010-08-29 02:02 *
By cixot
Assigned to changed from DamorK to -none-
Milestone changed from Bliżej nieokreślona przyszłość (a.k.a backlog) to zlew
Assigned to changed from DamorK to -none-
Milestone changed from Bliżej nieokreślona przyszłość (a.k.a backlog) to zlew
na mocy #753 - albo ktos sie tym zajmie i zaassignuje na siebie, albo wontfixuje za tydzien
on 2010-09-06 03:51 *
By cixot
Status changed from New to Invalid
Status changed from New to Invalid
Updating tickets (#368, #370, #420, #529, #570, #578, #592, #609, #610, #613, #619, #627, #629, #636, #637, #663, #664, #699, #710, #732, #734, #738, #742, #744, #747, #411, #616, #634, #638, #661, #668, #697, #698, #719, #735, #168, #282, #340, #355, #365, #371, #383, #561, #642, #665, #700)
wontfix
wontfix