Piszę platformówkę przy użyciu SFML2, mam taki system kolizji gdzie wyliczam położenie lewo,prawo,górę,dół od gracza i klocków, potem jeśli kolizja występuję przypisuję odpowiednie położenie:
if(player.getSize().intersects(sprite.getGlobalBounds()) )
{
float bottom = sprite.getPosition().y + sprite.getGlobalBounds().height;
float left = sprite.getPosition().x;
float right = sprite.getPosition().x + sprite.getGlobalBounds().width;
float top = sprite.getPosition().y;
float pBottom = player.getPosition().y + player.getSize().height;
float pLeft = player.getPosition().x;
float pRight = player.getPosition().x + player.getSize().width;
float pTop = player.getPosition().y;
float prevBottom = player.getPrevPosition().y + player.getSize().height;
float prevLeft = player.getPrevPosition().x;
float prevRight = player.getPrevPosition().x + player.getSize().width;
float prevTop = player.getPrevPosition().y;
if(pBottom >= top)
{
sf::Vector2f newPosition;
newPosition.x = player.getPosition().x;
newPosition.y = top - 0.1 - player.getSize().height;
player.setPosition(newPosition);
}
else if(pTop <= bottom)
{
sf::Vector2f newPosition;
newPosition.x = player.getPosition().x;
newPosition.y = bottom;
player.setPosition(newPosition);
}
else if(pRight >= left)
{
sf::Vector2f newPosition;
newPosition.x = left - 0.1 - player.getSize().width;
newPosition.y = player.getPosition().y;
player.setPosition(newPosition);
}
else if(pLeft <= right)
{
sf::Vector2f newPosition;
newPosition.x = right;
newPosition.y = player.getPosition().y;
player.setPosition(newPosition);
}
Problem polega na tym że jak kolizja powinna wystąpić po bokach -lewego lub prawego boku to teleportuje na górę klocka. Szukam rozwiązania tego problemu, bo potrzebuję taki system kolizji żeby też działało przy ruchomych platformach. Znacie jakieś rozwiązanie?