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

Started by
1 comment, last by mathacka 10 years, 12 months ago

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!

Advertisement

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

Thanks a lot, it's working perfectly now!

This topic is closed to new replies.

Advertisement