Zrobiłem funkcję do wykrywania kolizji dla mojej mapy kafelkowej. Funkcja działa poprawnie z jednym tylko błędem, którego nie jestem wstanie sam rozwiązać. Chodzi o to, że kolizja blokuje ślizganie się po ścianach tej mapy. Jeżeli gracz dotknie ściany górnym wierzchołkiem to jedyny ruch jaki może zrobić to pójście w duł.
Obraz z mojej gry w załączniku.
A to kod sprawdzający kolizję lewego górnego wierzchołka.
// Lewy gorny wierzchołek /////////////////////////////////
// Sprawdzanie na którym kafelku znajduje się wierzchołek ///////
liczba_x1 = player_x / BlockSize;
liczba_y1 = player_y / BlockSize;
liczba_x1 = ceil(liczba_x1);
liczba_y1 = ceil(liczba_y1);
liczba_x2 = liczba_x1;
liczba_y2 = liczba_y1;
// Kolizja - lewo ////////////////////////////
if (ColMapFile[liczba_x2][liczba_y2] == 2)
{
if (player_x <= liczba_x2*BlockSize+BlockSize)
{
player_kolizja_left = true;
}
}
else
{
player_kolizja_left = false;
}
// Kolizja - gora ////////////////////////////
if (ColMapFile[liczba_x2][liczba_y2] == 2)
{
if (player_y <= liczba_y2*BlockSize+BlockSize)
{
player_kolizja_up = true;
}
}
else
{
player_kolizja_up = false;
}
A to kod poruszania:
if (key[KEY_LEFT] && player_kolizja_left == false)
{
player_x -= 1;
}
if (key[KEY_RIGHT] && player_kolizja_right == false)
{
player_x += 1;
}
if (key[KEY_DOWN] && player_kolizja_down == false)
{
player_y += 1;
}
if (key[KEY_UP] && player_kolizja_up == false)
{
player_y -= 1;
}