Ich schreibe einen Breakout-Klon (mein erstes Spiel) und bin völlig festgefahren, wie ich herausfinde, welche Seite des Ziegels getroffen wurde.
Ich habe eine Kollisionserkennungsmethode, die folgendermaßen aussieht:
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;
Dies funktioniert völlig in Ordnung, aber ich muss die Seite der Kollision und die Position relativ zur Mitte kennen, um richtig reagieren zu können.
Ich habe die letzten Tage damit verbracht, herumzuschnüffeln, bin aber verloren.
quelle
Sie können Vector Math verwenden, um die Winkel zwischen ihnen zu entdecken!
Hier ist eine kurze Antwort:
Die Ziegelverkleidung ist ein kniffliger Vektor, sie ist der "Startpunkt" der Winkelberechnung. und wenn Sie möchten, dass der Vektor nach oben zeigt, machen Sie ihn (0, 1), zeigen Sie nach links (-1, 0), nach rechts (1, 0), zeigen Sie nach unten (0, -1). Angenommen, Sie befinden sich in der OpenGL-Achse, in der oben und rechts positiv sind.
Wenn Sie es nicht wissen, finden Sie hier die Definitionen der verwendeten Funktionen:
( https://en.wikipedia.org/wiki/Dot_product )
Referenz: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-2/
quelle