Jump to content

  • Log In with Google      Sign In   
  • 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.

  • You cannot reply to this topic
2 replies to this topic

#1 mathacka   Members   -  Reputation: 123

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.


Sponsor:

#2 Paradigm Shifter   Crossbones+   -  Reputation: 4782

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

#3 mathacka   Members   -  Reputation: 123

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.



PARTNERS