• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SDL2 tile map, kolizja

0 głosów
741 wizyt
pytanie zadane 29 sierpnia 2017 w C i C++ przez eldonKarleon Nowicjusz (120 p.)

Cześć, ostatnio próbuję zrobić platformówkę z czytaniem mamy z pliku tekstowego. Niestety zatrzymałem się na problemie, który mnie przerósł. A mianowicie kolizje. Rozumiem ogólny zamysł, jeśli player right < map left itd wtedy jest false (nie ma kolizji), else jest true. Tylko w moim kodzie czegoś brakuje. Niestety nie moge wymyślić czego. Tak to wygląda https://pastebin.com/dEFetzy86

Wyjaśnienie - mam 2 mapy (w jednym pliku tekstowym), mapa klocków, jeśli 0 wtedy nie ma niczego jeśli 1 wtedy jest pierwszy blok, 2 drugi itd.
mapa kolizji, jeśli 0 wtedy nie ma kolizji jeśli 1 kolizja jest.

w sprawdzaniu kolizji loopuje przez całą tablicę i sprawdzam czy jest == 1. Jesli jest wtedy jest kolizja, czyli zapisuje hitboxy każdego klocka.

Config::getSM(), zwraca instancje klasy ScreenManager, która jest odpowiedzialna za wszystkie screeny, czytaj menu, opcje, wyjście, gre.
od tego ->GetGame(), zwraca instanjce do GameplayScreen, czyli naszej mapy.

W update postaci, od left i right odejmuje Config::getSM()->GetGame()->getPosX() (pozycja X mapy, getPosY() oznacza pozycje Y mapy), ponieważ mapa się przesuwa (cofa) jeśli postać dojdzie do środka i idzie w prawo.

i sprawdzam w ifie jeśli checkCollision z right lub left == false (nie ma kolizji) wtedy mogę iść swobodnie, jeśli == true, znaczy, że nie moge iść swobodnie.

Gdy włączam grę, kolizja zwraca zawsze fałsz, nieważne co zrobię, w konsoli zawsze jest napisane “NIE MA KOLIZJI”.

Potrzebowałbym jakiegoś nakierowania co tutaj może być źle napisane, jak powinienem zmienić kod żeby był bardziej uniwersalny, w sensie, żebym mógł dodawać np. platformy do tego, chodzenie po drabinkach, kolizje innego typu, np. SAT albo capsule. Chciałbym właśnie kolizje zrobić w taki sposób jak teraz jest pokazany, w sensie, że w klasie gracza sprawdzamy ifem czy kolizja jest false, bo wtedy wydaje mi się, że łatwiej byłoby dodatkowo coś dołożyć. W kodzie jest przedstawiony update poruszania się tylko w prawo. Jeśli wytłumaczyłem coś źle, proszę mnie poprawić/pytać.
Tilowanie (mapy, nie kolizji) mam zrobione na zasadzie, że w zdjęciu mam 32 piksele wolne (przezroczyste pole, oznaczające pustkę na mapie, czyli nie ma kolizji).
Może powinienem zamiast 0 zamienić w pliku tekstowym na -1, a 0 zrobić też jako klocek. Ogólnie to bardzo bym chciał zrobić, że 0 to znaczy, że nie ma nic, a 1, 2 itd., że już są normalne klocki. Kwestia estetyczna, bardziej mi się podoba.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 136 wizyt
pytanie zadane 22 grudnia 2020 w C i C++ przez dnaiel Początkujący (400 p.)
0 głosów
1 odpowiedź 178 wizyt
pytanie zadane 23 października 2017 w C i C++ przez ElektronPL Obywatel (1,370 p.)
0 głosów
0 odpowiedzi 123 wizyt
pytanie zadane 18 czerwca 2017 w C i C++ przez shout123131 Nowicjusz (120 p.)

88,328 zapytań

136,921 odpowiedzi

305,575 komentarzy

58,599 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...