[#9]
Re: AMOS - pytanie do programistów
@Benedykt Dziubałtowski,
post #8
Rozumiem :)
Troche spedzilem czasu na programowaniu, algorytmice i tym podobnych i wiem czym jest wyznaczanie i opisywanie obszarow a takze sprawdzanie czy punkt znajduje sie w zadanym obszarze.
Ale:
1) samolot to nie punkt, tylko ksztalt, a zatem detekcja czy nadal miesci sie w dozwolonym obszarze nie moze sie odbywac na podstawie jednego piksela a calego obrysu samolotu - wiec do sprawdzenia jest mnostwo pikseli (bo moze sie zdarzyc tak, ze ktos wjedzie obrysem samolocika na obrys tla ale jeszcze nie bedziemy mieli spelnionego warunku dla punktu ktory chcesz sprawdzac (pozycja samolotu) - i wtedy gracz przezyje)
2) opisywanie scian przy pomocy 2wymiarowej tablicy to marnotrawstwo pamieci (proponujesz 0 jako brak sciany i 1 jako sciane) - zatem przy 320x256 mamy 80kB na same 0 i 1 (Amos nie ma malych typow) - opisywanie scian co 2 piksele - zmniejsza nam tablice do 20kB - to tez zdecydowanie za duzo jak na obrys :)
3) aby uniknac problemu 2 nalezaloby wykorzystac opis obszaru wspolrzednymi - tak jak opisywane sa obszary w plikach KML ktore wykorzystujemy na przyklad w mapach google do obrysowania obszaru - i to sie bardzo dobrze sprawdzi - wystarczy kilkadziesiat/kilkaset wspolrzednych i obszar jest dosc dokladnie opisany - a kilkaset bajtow a 20-80kB to roznica :)
4) do 3) mozna wykorzystac algorytm Shuterlanda (http://en.wikipedia.org/wiki/Point_in_polygon) ale to nadal jest dla punktu, zatem trzeba by go zmodyfikowac tak aby detekcja odbywala sie dla obszaru (nakreslonego przez ksztalt samolocika) - tak jak proponuja to tutaj (zmodyfikowanie sledzenie promieni) -
http://gamedev.stackexchange.com/questions/7735/how-to-find-if-circle-and-concave-polygon-intersect. Przy czym tu jest prosciej bo jest okrag ;)
Oczywiscie mozna isc na uproszczenia, i przyjac ze ksztalt samolociku opisany jest prostokatem, owalem lub od biedy piecio/szesciokatem (aby jak najbardziej przyblizyc ksztalt docelowy) - ale kazde takie uproszczenie bedzie sie odbijac na grywalnosci - bo w jednym miejscu samolot rozbije sie przed sciana a w innym kilka pikseli pozniej.
Tak jak wspominalem - detekcja kolizji dla bobow/spriteow jest bardzo fajnie zrobiona w Amosie i az prosi sie ja wykorzystac - tylko ze wystepuja wspomniane problemy. (ostatecznie mozna pociac maske kolizyjna na mniejsze boby, zawierajace tylko krawedzie kolizji i poukladac je na sciezce, ale to zmniejsza ilosc dostepnych pozniej bobow dla samych elementow gry).
Ciagle wierze ze jest w Amoise/AMALu jakas funkcja ktora pozwala na detekcje kolizji z tlem :) W przeciwnym przypadku przyjdzie sie zmierzyc z ciekawym zagadnieniem (ciekawe jak amos sobie wydajnosciowo z tym poradzi).
Moze z innej beczki - ktos widzial napisana w Amosie gre, w ktorej wystepowalby samolot/obiekt latajacy w tunelu i reagujacy na zderzenia (np. cos w stylu R-Type, Scramble)? A moze tego sie po prostu nie da tak zrobic ? (raczej w to watpie :p)