Marke Marke - 1 month ago 18
Android Question

Rotate sprite in libgdx by following the position of finger on android

I'm trying to rotate a sprite based upon where my finger is placed on the touch screen.

I have an arrow and i want the arrow to be pointing at my finger at all times as i'm drag it around over the screen.

I could easily set the sprite to any rotation using sprite.setRotation(angle)

How should i go about this?

Much appreciated if you can point me in the right direction.

Answer

(ax, ay) is coordinates of the center of the arrow, and (fx, fy) is the coordinates of the finger, and a is the angle, here is some pseudocode:

dx = fx - ax
dy = fy - ay
if (dx == 0) {
    a = 90
    return
}
if (dy == 0) {
    a = 0
    return
}
//tan(a) == abs(dy) / abs(dx) therefore
a = arctan(dy / dx)
if (dx > 0 && dy > 0) {
    // do nothing, a is correct
} else if (dx > 0 && dy < 0) {
    a = 360 - a
} else if (dx < 0 && dy > 0) {
    a = 180 - a
} else {
    a = 180 + a
}

I didn't implement and test it yet, I'll do it later if there will be need

Comments