Bonsoir, je me dirige vers vous pour échanger à propos de la gestion des collisions "proposé" par défaut.
En effet, pour me remettre dans le bain, j'ai pondu un petit Pong, simple, basique, sans menu ou score pour le moment, et il est proposé dans la SFML une gestion des collisions (basique je pense) via la fonction intersect().
Pour faire simple, par moment lorsque la balle entre en collision avec la barre, surtout quand elle vient à sa rencontre via l'arrête supérieur du rectangle, elle se loge à l'intérieur, rebondis tout le long et finis par reprendre un comportement standard de déplacement une fois l'autre extrémité atteinte. Disons qu'elles entre et sors de la barre.
Pour arrivé à cela, j'ai une classe Balle qui contient le sf::Sprite à gérer, pareil pour la barre et j'utilise :
if(m_balle.GetSprite().getGlobalBounds().intersects(m_barre1.GetSprite().getGlobalBounds()))
{
m_balle.ReverseX();
}
Je fais le même teste dans la gestion des collisions en Y pour inversé Y,le tout séparé dans une autre méthode.
Pour palier à ce "problème", j'ai essayé d'utiliser quelques conditions à base de
if(bord gauche de la balle left <= bord droit de la barre left+widht || bord droit de la balle left+widht >= bord gauche de la barre left)
{
if(bord haut de la balle top >= bord haut de la barre top+height || bord bas de la balle top+height <= bord bas de la barre top)
{
On inverse le sens car collision;
}
}
Mais cela n'a fais que moins bien son travail.
Je souhaitais savoir si quelqu'un avait une approche différent du problème, un pattern à suivre.
Cordialement et bonne soirée.