Autor Wątek: [C++/Allegro] problem z A-star  (Przeczytany 2991 razy)

Offline Maciohaker

  • Użytkownik

# Listopad 13, 2009, 18:22:05
Witam. Mam zrobiona mapke oparta na tablicy np.

mapa[3][3]= "
 1, 7, 5,
 2, 5, 1,
 1, 4, 2";

i druga tablice z kolizjom;

kolizja[3][3] = "
  0, 1, 1,
  0, 1, 0,
  0, 0, 0";

0 - teren wolny, 1 - teren zajety(nie do przejscia)

Jak mam zaimplementowac algorytm A* dla czegoś takiego?
Wszystkie Potwory i postacie mam oparte na klasach czy to problem?
nie wiem czy to pomoze ale kazdy kafel ma wymiary 101x100.
Wiem ze w regulaminie pisze zeby nie pisac postow "zrob cos za mnie bo nie umiem myslec" ale ja naprawde nie wiem jak to zrobic. Dziekuje.
« Ostatnia zmiana: Listopad 14, 2009, 17:08:21 wysłana przez Maciohaker »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

wine

  • Gość
# Listopad 13, 2009, 21:25:25
Algorytm A*?
Chyba za duży skrót. Nie rozumiem.

Na chłopski rozum:
jeżeli punkt koliduje z x*101 do (x+1)*101 i z*100 do (z+1)*100, przy czym te pole ma kolizje jeden, to następuje co? Kolizja z elementem nie do przejścia.

Klasy to żaden problem.

Ale dlaczego 101x100 a nie 1x1? W tym przypadku 0.01f="1" a 1="100".

Offline Angry Bull

  • Użytkownik

# Listopad 14, 2009, 00:32:36
Na mojej stronce tutaj masz rysowanie kafli z tablicy, i na podstawie tego kolizje wraz ze zderzeniem:
www.openthink.lua.pl



Sory za reklamowanie się, no ale po to robiłem te tutoriale na temat kolizji (wraz ze zderzeniem), aby nie było pytań tego typu na forach.

Offline Oti

  • Użytkownik

# Listopad 14, 2009, 01:01:46
Cytuj
tutoriale na temat kolizji (wraz ze zderzeniem)
A jak mogą byc bez zderzenia?

Offline Angry Bull

  • Użytkownik

# Listopad 14, 2009, 13:35:56
Cytuj
tutoriale na temat kolizji (wraz ze zderzeniem)
A jak mogą byc bez zderzenia?
No bo na większości ( a raczej i bym powiedział wszystkich ) polskich stronach, jest opisywane jak zrobić kolizje ( same wykrycie jej ), no a wykryć kolizje to każdy jeden, nawet początkujący potrafi.
No ale ze zderzeniem, to miałem tutaj na myśli to, że opisałem tam również kod zatrzymania postaci przed kaflem w czasie kiedy ma nastąpić kolizja.
Rozumiem, że użyłem nieodpowiedniego słowa "kolizja ze zderzeniem", ale jakoś nie wiedziałem jak to inaczej określić, skoro na wszystkich stronach "kolizja" jest opisywana jako samo jej wykrycie.

wine

  • Gość
# Listopad 14, 2009, 13:46:35
No ale ze zderzeniem, to miałem tutaj na myśli to, że opisałem tam również kod zatrzymania postaci przed kaflem w czasie kiedy ma nastąpić kolizja.
Kod: (cpp) [Zaznacz]
Obj.setSpeed(0)Zadziwające jak łatwo można coś zatrzymać ;)

Offline Liosan

  • Moderator

# Listopad 14, 2009, 14:00:49
Rozumiem, że użyłem nieodpowiedniego słowa "kolizja ze zderzeniem", ale jakoś nie wiedziałem jak to inaczej określić...
Wykrycie kolizji i reakcja na kolizję :)

Liosan

Offline Maciohaker

  • Użytkownik

# Listopad 14, 2009, 17:06:34
przepraszam za niejasny temat chodziło mi o algorytm A-Star ale nie wiem czy go dobrze napisałem a wymiary maja 100x100.
A na strone która podałes google wpuscic bo wykryto tam zlosliwe oprogramowanie. Jakos tam wszedlem prz IE. kolizja jest tam fajnie opisana tylko mi chodzi o algorytm wyszukiwania najszybszej drogi. Kompletnie nie rozumiem artykulu zamieszczonego na gamedevie.

Offline Adde

  • Użytkownik

# Listopad 14, 2009, 17:40:29
Złośliwiec na swojej stronie opisał wyszukiwanie drogi w przystępny sposób ;) Nie jest to chyba A* ale spisuje się nie najgorzej. http://darkcult.warsztat.gd/alg/droga.html

Offline Oti

  • Użytkownik

# Listopad 14, 2009, 18:07:39
No ale ze zderzeniem, to miałem tutaj na myśli to, że opisałem tam również kod zatrzymania postaci przed kaflem w czasie kiedy ma nastąpić kolizja.
Kod: (cpp) [Zaznacz]
Obj.setSpeed(0)Zadziwające jak łatwo można coś zatrzymać ;)
Bolisz mnie... Nie niwelujesz tym kolizji, po tym twoim magicznym sposobie zatrzymasz postac w miejscu w którym nie może stac..

wine

  • Gość
# Listopad 14, 2009, 19:55:30
No ale ze zderzeniem, to miałem tutaj na myśli to, że opisałem tam również kod zatrzymania postaci przed kaflem w czasie kiedy ma nastąpić kolizja.
Kod: (cpp) [Zaznacz]
Obj.setSpeed(0)Zadziwające jak łatwo można coś zatrzymać ;)
Bolisz mnie... Nie niwelujesz tym kolizji, po tym twoim magicznym sposobie zatrzymasz postac w miejscu w którym nie może stac..
Nie. Kolizje sprawdza się zanim postać dojdzie do jakiegoś fragmentu, a więc zatrzymuję ją gdy następuje kolizja a nie w tedy gdy taka kolizja nastąpiła.

Offline Angry Bull

  • Użytkownik

# Listopad 14, 2009, 20:14:15
No ale ze zderzeniem, to miałem tutaj na myśli to, że opisałem tam również kod zatrzymania postaci przed kaflem w czasie kiedy ma nastąpić kolizja.
Kod: (cpp) [Zaznacz]
Obj.setSpeed(0)Zadziwające jak łatwo można coś zatrzymać ;)
Bolisz mnie... Nie niwelujesz tym kolizji, po tym twoim magicznym sposobie zatrzymasz postac w miejscu w którym nie może stac..
Nie. Kolizje sprawdza się zanim postać dojdzie do jakiegoś fragmentu, a więc zatrzymuję ją gdy następuje kolizja a nie w tedy gdy taka kolizja nastąpiła.
Tak, sprawdza się zanim dojdzie do kolizji. Ale aby postać się zatrzymała, ale mogła się poruszać w pozostałe strony, nie każdy o tym wie i nie każdy potrafi to zrobić.
Jakby potrafili, to by nie było setek tematów nt. kolizji.

Offline Kos

  • Użytkownik
    • kos.gd

# Listopad 14, 2009, 23:17:41
Nie. Kolizje sprawdza się zanim postać dojdzie do jakiegoś fragmentu, a więc zatrzymuję ją gdy następuje kolizja a nie w tedy gdy taka kolizja nastąpiła.

Najlepiej imo obliczyć miejsce, w którym nastąpiłaby naprawdę kolizja (gdzieś pomiędzy klatkami symulacji) i tam postać ulokować.