【发布时间】:2013-09-14 03:53:03
【问题描述】:
当汽车撞到星星时,我想将星星(我的代码中的硬币)移动到屏幕的右上角。每次更新期间,star 和 road 都以恒定的速度向下移动。由于道路向下移动,汽车没有移动,但似乎在向上移动。虽然它可以根据用户的命令移动到左右车道。
所以我用下面的方法计算了星星和屏幕右上角的夹角
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));
在我的Draw 方法中,我更新了coin.Position 使用
coin.Position += collidedCoinVelocity * 10 ;
问题是星星(硬币)没有按我的意愿发送到右上角,而是在右侧屏幕中间的某个地方。
当星星在右侧车道被击中时,它与右上角之间的角度始终为
1.2196048576751 radians = 69.878211 degree
当星星在左边车道时,角度是
0.952588487628243 radians = 54.5793 degree
我是否正确计算了角度,我错过了什么?也许我忘了考虑星星的向下运动?
编辑
我已更新图像以显示我尝试计算的角度并编辑了我的问题以使其更清晰。
编辑 2
添加了第二张图片以显示星星被击中后的去向。
【问题讨论】:
标签: c# windows-phone-8 xna monogame