![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 2 Dołączył: 13.09.2014 Ostrzeżenie: (0%) ![]() ![]() |
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 Ten post edytował Trzebu 13.09.2014, 10:25:35 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Chodziło żebyś zobaczył algorytm i sposób implementacji kolizji.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 2 Dołączył: 13.09.2014 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dodajesz sobie do tablicy wsp. kwadratu opisującego obiekt kolizyjny, podczas ruchu sprawdzasz czy nowe koordynaty ruchu nie wchodzą w żaden kwadrat kolizji.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 675 Pomógł: 58 Dołączył: 17.12.2013 Ostrzeżenie: (10%) ![]() ![]() |
Śmiejemy się tu w pracy... pozdrowienia z Garmory.
Nie mogę Ci powiedzieć jak to jest w Margonem napisane ale.. W bazie trzymaj współrzędne stałych obiektów na mapie i je sobie do jakiejś globalnej zmiennej zapisuj. No a potem to już przy każdym ruchu graczem musisz sprawdzać ifem czy może wejść na to pole czy akurat jest na nie blok założony. edit: aha... i po stronie serwera za każdym razem sprawdzaj też czy gracz stoi tam gdzie stać może. Różnych magików widziałem. Ten post edytował tzm 24.09.2014, 09:02:42 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 2 Dołączył: 13.09.2014 Ostrzeżenie: (0%) ![]() ![]() |
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:
Zrobiłem zaledwie 1/4 mapy w taki sposób i już odczuwa się, że php nie jest zbyt dobrym pomysłem na kolizje. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 675 Pomógł: 58 Dołączył: 17.12.2013 Ostrzeżenie: (10%) ![]() ![]() |
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. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
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...
-------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 675 Pomógł: 58 Dołączył: 17.12.2013 Ostrzeżenie: (10%) ![]() ![]() |
@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.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
@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) ![]() -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 2 Dołączył: 13.09.2014 Ostrzeżenie: (0%) ![]() ![]() |
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? |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 675 Pomógł: 58 Dołączył: 17.12.2013 Ostrzeżenie: (10%) ![]() ![]() |
Nie mam czasu ostatnio stąd to milczenie...
Zobacz... Masz mapę 256 x 256 klocków. Żeby nie pobierać całości od razu i nie zawalać pamięci nie potrzebnie pobieraj sobie 32x32 i zawsze jak jesteś przy granicy to rób sobie update z bazy. No nie wiem jak prościej Ci to wyjaśnić... kolizje kolizjami ale tutaj temat wchodzi na troszkę modelowanie świata gry. Mam Ci to narysować i pokazać przykład jakbym to zrobił? |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 2 Dołączył: 13.09.2014 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli Ci się chce, to rozrysuj mi to
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 02:50 |