• Create Account

## Trig: Getting a space ship to head in a direction according to a joystick, using AGK

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

2 replies to this topic

### #1mathacka  Members

124
Like
0Likes
Like

Posted 21 April 2013 - 01:32 AM

Hi,

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

SetSpriteAngle(spriteNum, angle)

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.

Thanks guys!

Edited by mathacka, 21 April 2013 - 01:33 AM.

### #2Paradigm Shifter  Members

5832
Like
1Likes
Like

Posted 21 April 2013 - 02:15 AM

angleInRadians = atan2(y, x);

You already calculated x and y from the joystick.

Then convert to degrees and call the set angle function. 0 degrees corresponds to facing due East.

"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley

### #3mathacka  Members

124
Like
0Likes
Like

Posted 21 April 2013 - 03:16 AM

Thanks a lot, it's working perfectly now!

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.