Salut à tous!
Je n'arrive pas à bien gérer les collisions dans mon programme. J'ai un personnage que je déplace avec la souris, et j'ai un autre carré qui a une position fixe.
J'ai réussi à gérer les collision pour les côté droit et gauche du personnage, mais quand j'essaie de gérer celles du haut et du bas, mon programme prend quand même les collisions de gauche et de droite en compte.. C'est dur à expliquer pour un débutant comme moi alors j'ai fait une petite vidéo très simple :
http://videobam.com/JnqjKEt voici mon code source :
void Player::update(sf::Vector2i mousePosition, Level *level) {
// Ma class Player hérite de sf::RectangleShape
sf::Vector2f position = getPosition();
m_delta.x = mousePosition.x - position.x;
m_delta.y = mousePosition.y - position.y;
// On déplace le personnage vers la souris
move(m_delta.x * m_playerSpeed, m_delta.y * m_playerSpeed);
// Rectangle du personnage
sf::FloatRect playerRect = getGlobalBounds();
// Rectangle temporaire avant d'avoir toutes les cases du niveau à gérer (pour tester avec une seule case)
sf::FloatRect levelTemp;
levelTemp.top = 10 * CELL_SIZE;
levelTemp.left = 10 * CELL_SIZE;
levelTemp.width = levelTemp.height = CELL_SIZE;
// Rectangle d'intersection
sf::FloatRect intersection;
if (playerRect.intersects(levelTemp, intersection)) {
if (playerRect.left < levelTemp.left + CELL_SIZE &&
playerRect.left + CELL_SIZE > levelTemp.left + CELL_SIZE) {
move(intersection.width, 0);
}
else if (playerRect.left + CELL_SIZE > levelTemp.left &&
playerRect.left < levelTemp.left) {
move(-intersection.width, 0);
}
else if (playerRect.top < levelTemp.top + CELL_SIZE &&
playerRect.top + CELL_SIZE > levelTemp.top + CELL_SIZE) {
move(0, intersection.height);
}
}
}
J'espère que vous pouvez m'aider. Ça fait des heures que je tente de trouver une solution.. :S
Merci d'avance! à+