I want to move the star (coin in my code) to the exact top right corner of the screen when the car hit the star. Both star and road are moving downward at a constant speed during each update. The car does not move but appears to be moving upward because of the road moving downward. Although it can move to the left and right lane on user's command.
So I calculated the angle between the star and the top right corner of the screen using the following method
public double AngleBetween(Vector2 a, Vector2 b)
{
return Math.Atan2(b.Y - a.Y, b.X - a.X);
}
In my Update
method, the following calculate the velocity to move and send it to the top right corner of the screen
double angleBetween = coin.AngleBetween(coin.Position, new
Vector2(currentGame.GraphicsDevice.Viewport.Bounds.Right, 0));
collidedCoinVelocity = new Vector2((float)Math.Sin(angleBetween),
-(float)Math.Cos(angleBetween));
In my Draw
method, I updated the coin.Position
using
coin.Position += collidedCoinVelocity * 10 ;
The problem is the star (coin) is not sent to the top right corner as I wanted but it's somewhere in the middle of the right screen bound.
When the star is hit when it's on the right lane, the angle between it and the top right corner is always
1.2196048576751 radians = 69.878211 degree
When the star is on the left lane the angle is
0.952588487628243 radians = 54.5793 degree
Am I calculating the angle correctly, what am I missing? Perhaps I am forgetting to consider the downward movement of the star?
EDIT
I have updated the image to show the angle I am trying to calculate and edited my question to make it clearer.
EDIT 2
Added a second image to show where the star goes after being hit.