Czyli jeśli chcemy aby nasi wrogowie mogli celować w nas albo naszych sojuszników, albo chcemy by nasza postać patrzyła w kierunku kursora myszki, czy dla jakiś innych celów, możecie wykorzystać poniższy kod.
private float DegreesToEnemy(Solider my,
Vector2 enemy)
{
double x,y, tg;
x = enemy.x - my.pozycja.x;
y = enemy.y - my.pozycja.y;
tg = Math.atan(y / x) * math.radiansToDegrees;
if(tg >= 0) // I albo
III połowa układu kartezjańskiego
{
if(x <= 0) // należy
do III
{
return 90
+ Math.abs((float)tg);
}
else // należy do I
{
return (float)tg +
270;
}
}
else // II albo
IV
{
if(x <= 0) // należy
do IV
{
return (90 - Math.abs((float)tg));
}
else // należy do II
{
return 180 +
(90 - Math.abs((float)tg));
}
}
}
Powyższy kod zwraca kąt o jaki kierunek należy obrócić Sprita/Texture aby patrzał prosto na punkt obrany jako Vector2 enemy.
UWAGA: Stopnie rosną w kierunku przeciwnym do kierunku zegara, ponieważ tak oblicza się obrót w libGDX. Jeśli chcemy zamienić to na ruch zgodny z ruchem wskazówek zegara należy zastosować taki zapis:
(360 - DegreesToEnemy)
UWAGA: Statyczna metoda Math.atan()pochodzi z klasy systemowej a nie tej z libGDX która to u mnie nazywa się math.