Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单游戏-在一个点周围有一个对象圆_C#_Xna 4.0_Monogame - Fatal编程技术网

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(位移位置)而不是正常位置(如果轨道当前正在运行)渲染轨道器。

使用此选项。微分计算中的位置每次都会发生变化,因此“微分”会不断变化,从而改变圆的半径。