• 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
113 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ź 137 wizyt
pytanie zadane 23 października 2017 w C i C++ przez ElektronPL Obywatel (1,090 p.)
0 głosów
0 odpowiedzi 82 wizyt
pytanie zadane 18 czerwca 2017 w C i C++ przez shout123131 Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 53 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez iksdek Użytkownik (550 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

66,503 zapytań

113,269 odpowiedzi

239,876 komentarzy

46,641 pasjonatów

Przeglądających: 264
Pasjonatów: 8 Gości: 256

Motyw:

Akcja Pajacyk

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

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

...