Ecole Polytechnique Fédérale de Lausanne
Section Sciences de la vie
Programmation Orientée Objet
Tutoriel librairie graphique (SFML)

V. Gestion des collisions: rebond et game over

A ce stade, vous avez déjà appris l'essentiel des notions qui vous seront nécessaires à la réalisation du projet de cette année. A ce titre cette partie, un peu plus difficile, peut-être considérée comme facultative. Nous la proposons pour compléter la programmation du jeu de Pong et introduire la problématique du test de collisions (que nous traiterons un peu différement dans le projet).

Toutes les formes dans SFML (rectangle, cercle ...en fait tout objet héritant de sf::Shape) ainsi que les sprites possèdent une fonction FloatRect getGlobalBounds() retournant un rectangle délimitant celle-ci. Dans le cas des sprites et des cercles, le rectangle (appelé bounding-box dans le jargon) est déterminé automatiquement.

Un objet de type sf::FloatRect représente un rectangle à coordonnées réelles. Cette classe possède une méthode bool intersects(const Floatrect&) retournant true si et seulement si les deux rectangles s'intersectent (avec la convention que seules les arêtes à gauche et en haut sont incluses dans le bord)

Un exemple d'utilisation est le suivant:

//Création d'un rectangle dont le coin en haut à gauche est en (10,10), de taille 200x100
sf::FloatRect r1(10,10,200,100);
//Création d'un rectangle dont le coin en haut à gauche est en (0,0), de taille 200x100
sf::FloatRect r2(0,0,200,100);
//Test d'intersection
std::cout<<r1.intersects(r2)<<std::endl;