J'écris un clone de breakout (mon premier jeu) et je suis totalement bloqué quant à la façon dont je détermine quel côté de la brique a été touché.
J'ai une méthode de détection de collision qui ressemble à ceci:
DetectCollision(Object a, Object b)
x = distance(a.x, b.x);
y = distance(a.y, b.y);
if (x is smaller than the combined width & y is smaller is than combined height {
return true;
}
return false;
Cela fonctionne parfaitement, mais j'ai besoin de connaître le côté de la collision et l'emplacement par rapport au centre afin de réagir correctement.
J'ai passé les derniers jours à fouiner mais je suis perdu.
la source
Vous pouvez utiliser Vector Math pour découvrir les angles entre eux!
Voici une réponse courte:
Le parement de brique est un vecteur délicat, c'est le "point de départ" du calcul de l'angle. et si vous voulez que le vecteur pointe vers le haut, faites-le (0, 1), pointez à gauche (-1, 0), à droite (1, 0), pointez vers le bas (0, -1). En supposant que vous êtes dans l'axe OpenGL, où haut et droite sont positifs.
Si vous ne le savez pas, voici les définitions de chaque fonction utilisée:
( https://en.wikipedia.org/wiki/Dot_product )
Référence: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-2/
la source