C# 单游戏-在一个点周围有一个对象圆
我有一个带有C# 单游戏-在一个点周围有一个对象圆,c#,xna-4.0,monogame,C#,Xna 4.0,Monogame,我有一个带有Vector2位置的对象和一个带有Vector2位置的光标 当我按住某个键时,我希望对象围绕该对象旋转,但我无法计算正确的坐标 我用以下代码成功地使对象围绕光标旋转(但它不是一个完美的圆,而是一个螺旋形): Vector2 diff= Vector2.Normalize(cursor.Location - this.Location); float angle = (float)Math.Atan2(diff.Y, diff.X) + (float)(90 * (Math.PI /
Vector2位置
的对象和一个带有Vector2位置
的光标
当我按住某个键时,我希望对象围绕该对象旋转,但我无法计算正确的坐标
我用以下代码成功地使对象围绕光标旋转(但它不是一个完美的圆,而是一个螺旋形):
Vector2 diff= Vector2.Normalize(cursor.Location - this.Location);
float angle = (float)Math.Atan2(diff.Y, diff.X) + (float)(90 * (Math.PI / 180));
this.Position += new Vector2((float)(speed * Math.Cos(angle)), (float)(speed* Math.Sin(angle)));
我计算光标和对象位置之间的角度,并将该值加上90°(弧度),根据我的逻辑,这应该使对象以完美的圆移动。但是,光标和对象之间的距离会迅速扩展
我在这里计算错了什么?通常,当您希望某个物体围绕某个点旋转时,您可以定义一定量的距离,并在更新方法中以增量方式更改角度。然后在绘图方法中,您可以通过计算光标的位置、位置、与光标的距离以及所需的距离,在应该绘制的位置绘制 在大多数情况下,您希望您的轨道器具有与光标相同的轨迹,因此在绘图方法中计算新位置效果最佳,因为这些计算既便宜又超快速(您通常不希望占用绘图方法) 我现在无法检查,但您应该做以下几行: 假设对象应该以角速度(每秒)从光标旋转D距离,然后在最初发生这种情况时,将可变角度设置为零。然后在更新中执行以下操作:
angle += (gameTime.ElapsedGameTime.TotalSeconds * AngularVelocity)
在绘制方法中,请执行以下操作:
var displacedPosition = new Vector2(D * Math.Sin(angle), D * Math.Cos(angle));
并使用displacedPosition(位移位置)而不是正常位置(如果轨道当前正在运行)渲染轨道器。使用此选项。微分计算中的位置每次都会发生变化,因此“微分”会不断变化,从而改变圆的半径。