Piszę breakout clone (moja pierwsza gra) i całkowicie utknąłem w tym, jak dowiedzieć się, która strona klocka została trafiona.
Mam metodę wykrywania kolizji, która wygląda następująco:
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;
Działa to całkowicie dobrze, ale muszę znać stronę kolizji i lokalizację względem środka, aby odpowiednio zareagować.
Spędziłem ostatnie kilka dni węsząc dookoła, ale jestem zagubiony.
źródło
Możesz użyć Vector Math, aby odkryć kąty między nimi!
Oto krótka odpowiedź:
Cegła licowa jest trudnym wektorem, jest „punktem początkowym” obliczenia kąta. a jeśli chcesz, aby wektor wskazywał w górę, ustaw go (0, 1), wskaż w lewo (-1, 0), w prawo (1, 0), wskaż w dół (0, -1). Zakładając, że jesteś w osi OpenGL, gdzie góra i prawo są dodatnie.
Jeśli nie wiesz, oto definicje każdej użytej funkcji:
( https://en.wikipedia.org/wiki/Dot_product )
Odniesienie: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-2/
źródło