車が星にぶつかったときに、星 (私のコードではコイン) を画面の右上隅に正確に移動したいと考えています。星と道路の両方が、各更新中に一定の速度で下に移動しています。車は動かないが、道路が下に動いているため、上に動いているように見える。ユーザーのコマンドで左右の車線に移動できますが。
そこで、次の方法を使用して、星と画面の右上隅の間の角度を計算しました
public double AngleBetween(Vector2 a, Vector2 b)
{
return Math.Atan2(b.Y - a.Y, b.X - a.X);
}
私のUpdate
方法では、以下は移動する速度を計算し、画面の右上隅に送信します
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));
私の方法では、 usingDraw
を更新しましたcoin.Position
coin.Position += collidedCoinVelocity * 10 ;
問題は、スター (コイン) が思ったように右上隅に送信されず、右画面の中央のどこかにバインドされていることです。
スターが右レーンにあるときにヒットすると、スターと右上隅の間の角度は常に
1.2196048576751 radians = 69.878211 degree
星が左車線にある場合、角度は
0.952588487628243 radians = 54.5793 degree
角度を正しく計算していますが、何が欠けていますか? 星の下向きの動きを忘れているのではないでしょうか?
編集
計算しようとしている角度を示すように画像を更新し、質問を編集してより明確にしました。
編集2
攻撃を受けた後の星の移動先を示す 2 番目の画像を追加しました。