Trzebu
13.09.2014, 10:03:13
Witam,
Potrzebuję pomocy co do kolizji na mapie 2d. Mapy mam takie same jak w grze Margonem, ale nie mam pojęcia jak zrobić kolizje, czyli jak zrobić żeby gracz nie mógł wchozić np na drzewa na mapie.
Za każdą pomoc dziękuję,
Pozdrawiam
//Proszę o przeniesienie do działu programowanie w PHP
Trzebu
20.09.2014, 18:29:47
Właściwie pomyślałem, że można zrobić to własnie tak:
MAP = [[2,2,2,2,2,2,2,2,2,2,2,2],
[2,1,1,1,1,2,1,1,1,1,1,2],
[2,1,1,1,1,2,1,1,1,1,1,2],
[2,1,1,1,1,2,1,1,2,1,1,2],
[2,1,1,1,1,2,1,1,1,1,1,2],
[2,1,1,2,2,2,1,1,1,1,1,2],
[2,1,1,1,1,1,1,1,1,1,1,2],
[2,1,1,1,1,1,1,1,1,1,1,2],
[2,1,1,1,2,2,2,2,2,1,1,2],
[2,1,1,1,1,1,1,1,1,1,1,2],
[2,1,1,1,1,1,1,1,1,1,1,2],
[2,2,2,2,2,2,2,2,2,2,2,2]]
Ale nasuwają się pytania jak to zrobić, bo u mnie mapą jest obraz png i wszystko trzeba podawać w px. Generalnie, to nie ogarniam jakim kodem wywołać kolizję na mapie i w tym tkwię od dłuższego czasu
Trzebu
27.09.2014, 10:10:22
Oo, jak miło. Padły o mnie słowa w Garmory, to zaszczyt dla mnie. Także pozdrawiam, wierny gracz Trzebu.
Ponieważ nie chce mi się na razie robić zapisywania pozycji gracza w bazie zrobiłem to chyba w najprostszy sposób:
if((int)$_POST['x']==0 && (int)$_POST['y']==-32){
}
Zrobiłem zaledwie 1/4 mapy w taki sposób i już odczuwa się, że php nie jest zbyt dobrym pomysłem na kolizje.
Zrób no jakiegoś print screena i rzuć mi na pw bo nie bardzo rozumiem o jakie kolizje Ci chodzi. Kolizje w margonem nie są takie jak na przykład w grach platformowych.
Wiesz co jestem w garmory tylko na stażu ale jakby Thinker rzucił temat zrobienia mini gierki ala margonem to bym to osobiście rozwiązał tak...
Masz X elementów i koordynatów na mapie pobranych z bazy danych, np market, albo karczmę i javascriptem dajesz możliwość kliknięcia w hrefa dopiero jak ktoś jest blisko, powiedzmy 32 pixele od obiektu - to jest pikuś żeby zrobić. Ale klikając w ten link i wysyłając ajaxem dane żądanie do serwera - MUSISZ sprawdzić czy gracz jest w odpowiednim miejscu żeby ten link kliknąć z tego powodu że JS łatwo oszukać.. z drugiego końca świata bym klikał na karczmę w mieście gdzieś w c* daleko. Mówię.. chcesz to dawaj PS na PW bo mam zajawe na pisanie gierek ostatnio.
zegarek84
27.09.2014, 15:09:32
by zoptymalizować całość mapę powinieneś podzielić na rejony by nie sprawdzać kolizji na całej mapie (zależy jak duża itd...), ogólnie powinieneś poczytać o algorytmach a zwłaszcza o sortowaniu kubełkowym by zminimalizować liczbę przeglądanych elementów na mapie względem odległości, potem możesz niemal wszystkie warunki przyrównywać jakie będziesz potrzebował... zależy co chcesz zrobić i jak bardzo zaawansowanego, jednak i tak celem optymalizacji powinieneś poczytać o algorytmach by wiedzieć jak w aplikacji ułożyć sobie dostęp do danych... np. przy dużej mapie jeśli masz współrzędne gracza i chcesz rzadziej pobierać elementy z bazy to gdy jest nałożony index na X i Y to obiekty możesz pobrać pomiędzy [(X_gracza - zasięg);(X_gracza + zasięg)] oraz [(Y_gracza - zasięg);(Y_gracza + zasięg)], oczywiście jeśli np. w JS masz zaciągniętą całą mapę musisz sobie zaimplementować właśnie odpowiednie algorytmy do przeszukiwania mapy względem pozycji gdyż jeśli ta mapka jest duuuuża to będzie cieło co każde sprawdzenie ruchu/akcji...
@zegarek84 , wystarczy że podzieli mapę na mniejsze czesci i poki jest w ich zasiegu bedzie to trzymal w zmiennej globalnej map - to czy se ja pan kowalski edytuje zeby sie teleportowac gowno mu da pod warunkiem ze serwer bedzie zabezpieczony przed tego typu akcjami. ja tu nie widze zadnej matematyki i algorytmow. proste ify w zasiegu jakiegos obszaru mapy ktore beda sie wykonywaly po stronie klienta, serwer jest zwolniony od niepotrzebnych przeliczen i kazdemu to pasuje. chocbys nie wiem jak duzy swiat mial to serwera nie zajedziesz przy tym rozwiazaniu. gdzies jak pisalem gre w zycie to mialem funkcje do sprawdzania elementu w tablicy XY.. poszukam tego potem.
zegarek84
27.09.2014, 19:41:50
Cytat(tzm @ 27.09.2014, 17:18:30 )

@zegarek84 , wystarczy że podzieli mapę na mniejsze czesci...
może nie potrzebnie rozpisałem się ale czego dotyczy algorytm sortowania kubełkowego [a o podzieleniu mapy to już pewnie skleroze miałem ;-D ;p)

algorytm ten polega na zatraceniu precyzji, wykorzystując to można efektywnie podzielić mapę i odnajdować sąsiednie kwadraty względem gracza... ale zapomnijmy to co pisałem, to przeszłość gry w plemiona przy intensywnym farmieniu (a znajomym jakoś pasowało udostępnić podobne dogodne narzędzia bez owijania w bawełnę jak to zrobić samemu ;p)...
Trzebu
4.10.2014, 09:06:27
tzm:
Wysłałem Ci na PV tego ss'a. Co do tego, że mam podzielić tą mapę na fragmenty, słyszałem o tej technice, tylko jak? Mam mapę podzielić na mniejsze kawałki i potem ją w bazie jakoś poskładać i dopiero wyświetlać?
To robimy coś z tymi kolizjami?