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.