I'm making a 2D spaceship-shooter game that moves in all directions, (i.e. ( -x, +x ),( -y, +y ) ).
I'm trying to make the spaceship face the direction of the movement according to a virtual joystick. The virtual joystick has it's x and y coordinates working correctly and they are normalized (ie. between -1 and +1) in both x and y.
I'm able to set the angle of the image I'm using by a call to
where the angle is in degrees. The problem I'm having is with the trigonometry involved.
I know from trig that calculating the angle is radius*cos(x), and I could be wrong on that, so I tried this:
x = GetVirtualJoystickX(1) y = GetVirtualJoystickY(1) r = sqrt(x*x + y*y) angle = r * cos(x) SetSpriteAngle(1,angle)
Problem one is, there's no account for the Y direction, so I tried:
angle = r*cos(x) + r*sin(y)
Still a problem, just not working correctly, so I tried arcsine and arccosine:
angle = r*aCos(x) + r*aSin(y)
Now the image is just flipping in what seems like a random direction, and just in case it was calculating, instead of the total angle, perhaps it was the angle from the x intercept, so I tried:
if GetVirtualJoystickX(1) > 0 and GetVirtualJoystickY(1) > 0 //angle = angle elseif GetVirtualJoystickX(1) < 0 and GetVirtualJoystickY(1) > 0 angle = angle - 180 elseif GetVirtualJoystickX(1) < 0 and GetVirtualJoystickY(1) > 0 angle = angle - 270 elseif GetVirtualJoystickX(1) > 0 and GetVirtualJoystickY(1) < 0 angle = angle - 360 else angle = 0 endif
Now it's only flipping as if angle is close to 0 and moving occasionally in a certain 270 degree position I believe,
So I guess I'm going to have to admit that my trigonometry skills aren't what they used to be and ask you guys for some help, by the way sin(x) is where x is in degrees and sinr(x) is where x is in radians, so I might be missing it there too, frankly I'm just too confused to get any farther right now.
Edited by mathacka, 21 April 2013 - 01:33 AM.