Jestem w trakcie tworzenia gry 2d w której mają zachodzić kolizje pomiędzy różnymi ścianami, problem polega w tym obiekt gracza nie zatrzymuje się na ścianach..
oto tablica ścian na planszy:
Box wall[]{ {-43.0f,43.0f,-34.0f,36.0f}, {-27.0f,43.0f,-10.0f,36.0f}, {10.0f,43.0f,27.0f,36.0f},
{ 34.0f,43.0f,43.0f,36.0f }, {-43.0f,28.0f,-34.0f,23.0f}, {-27.0f,28.0f,-23.0f,3.50f},
{-27.0f,15.0f,-10.0f,11.25f}, {-14.0f,28.0f,14.0f,23.0f}, {-2.0f,28.0f,2.0f,11.30f},
{23.0f,28.0f,27.0f,3.50f}, {10.0f,15.0f,27.0f,11.30f}, {43.0f,23.0f,34.0f,28.0f},
{-14.5f,3.5f,-14.0f,-3.5f}, {-14.5f,3.5f,-4.0f,3.0f}, {-14.5f,-3.0f,14.5f,-3.5f},
{14.0f,3.5f,14.5f,-3.5f}, {4.0f,3.5f,14.5f,3.0f}, {-27.0f,-3.50f,-23.0f,-15.0f},
{-2.0f,-11.30f,2.0f,-26.70f}, {-14.5f,-3.50f,27.0f,-15.0f}, {-43.0f,-21.70f,-35.0f,-24.70f},
{-38.0f,-21.70f,-35.0f,-34.0f}, {-27.0f,-21.70f,-10.0f,-26.70f},{10.0f,-21.70f,27.0f,-26.70f},
{35.0f,-21.70f,38.0f,-34.0f}, {35.0f,-21.70f,43.0f,-24.70f}, {-43.0f,-41.0f,-10.0f, -43.0f},
{-27.0f,-33.70f,-23.0f,-43.0f}, {-14.5f,-33.70f,14.5f,-34.70f}, {-2.0f,-33.70f,2.0f,-43.0f},
{10.0f,-41.0f,43.0f,-43.0f}, {23.0f,-33.70f,27.0f,-43.0f}, {-52.0f,6.0f,-3.5f,3.5f},
{-37.0f,15.0f,-3.5f,3.5f}, {-52.0f,15.0f,-3.5f,13.0f}, {-52.0f,52.0f,-50.0f,13.0f},
{-52.0f,52.0f,52.0f,50.0f}, {-2.0f,52.0f,2.0f,36.0f}, {50.0f,52.0f,52.0f,13.0f},
{35.0f,15.0f,52.0f,13.0f}, {35.0f,15.0f,37.0f,3.5f}, {35.0f,6.0f,52.0f,3.5f},
{-52.0f,-3.5f,35.0f,-6.0f}, {-37.0f,-3.5f,-35.0f,-15.0f}, {-52.0f,-13.0f,-35.0f,-15.0f},
{-52.0f,-13.0f,-50.0f,-52.0f}, {-5.0f,-32.0f,-4.5f,-34.0f}, {-52.0f,-50.0f,52.0f,-52.0f},
{50.0f,-13.0f,52.0f,-52.0f}, {45.0f,-32.0f,52.0f,-34.0f}, {35.0f,-13.0f,52.0f,-15.0f},
{35.0f,-3.5f,37.0f,-15.0f}, {35.0f,-3.5f,52.0f,-6.0f}
};
a oto algorytm na wyszukiwanie kolizji oraz funkcja ktora sprawdza czy w danym momencie postać gracza nie koliduje z żadną ściana.
bool is_colliding(Box A, Box B)
{
if (A.left < B.left + B.width &&
A.left + A.width > B.left &&
A.top < B.top + B.height &&
A.height + A.top > B.top)
{
return true;
}
else return false;
}
bool isCollision(Box box[], Box Pac)
{
for (int i = 0; i < 53; i++)
{
if (is_colliding(box[i], Pac) == true)
return true;
else return false;
}
}
obiekt gracza jest okręgiem który w kodzie opisuję jako Box,
okrąg ma promień 2.5f, i pozycja startowa to : Posx = 0.0f, Posy = -30.0f
(Posx,Posy)
jego współrzędne są ustawione (Posx-r, Posy+r, Posx+r, Posy-r)
if (_key == GLUT_KEY_RIGHT && !isCollision(wall,Pacman))
{
Posx += 0.5f;
}
tak wyglada konstruktor obiektu Box
Bo(x,y,X,Y)
x - wspolrzedna x lewego gornego wierzcholka
y - wspolrzedna y lewego gornego wierzcholka
X - wspolrzedna x prawego dolnego wierzcholka
Y - wspolrzedna Y prawego dolnego wierzcholka
width = X - x
height = y - Y
gdyby był ktoś kto jest w stanie mi pomóc byłbym bardzo wdzięczny.