C# “如何制作一个对象”;飞";朝向鼠标XNA

C# “如何制作一个对象”;飞";朝向鼠标XNA,c#,xna,trigonometry,game-physics,C#,Xna,Trigonometry,Game Physics,我试图使对象在每次单击鼠标时滑向鼠标。它将不断地移动。现在,如果我在它前面(上面或下面)单击,它会沿着大致方向移动,但角度错误。当我在它后面点击的时候,它会慢很多,而且它最近的移动速度非常慢 if (isdown()) //if the mouse is clicked { double paulx = Paullocation.X + radius; //midpoints of object double pauly = Paullocation.Y + radius;

我试图使对象在每次单击鼠标时滑向鼠标。它将不断地移动。现在,如果我在它前面(上面或下面)单击,它会沿着大致方向移动,但角度错误。当我在它后面点击的时候,它会慢很多,而且它最近的移动速度非常慢

if (isdown()) //if the mouse is clicked
{
    double paulx = Paullocation.X + radius; //midpoints of object
    double pauly = Paullocation.Y + radius;
    double targetx = ms.X; //clicked location
    double targety = ms.Y;
    if (isdown(Keys.Space)) //if space is pressed
    {
        double hypotenuse = Math.Sqrt(Math.Pow(paulx - targetx, 2) + Math.Pow(pauly - targety, 2));
        //finds hypotenuse^
        double xcomponent = targetx - paulx; //finds both legs of triangle
        double ycomponent = targety - pauly; //that is made by mouse

        Paulincrement.X = (float)Math.Cos(xcomponent / hypotenuse); //main issue
        Paulincrement.Y = (float)Math.Sin(ycomponent / hypotenuse); //main issue

    }
}
Paullocation.X += Paulincrement.X;
Paullocation.Y += Paulincrement.Y;

如果
Paullocation
是一个
Vector2
,您只需计算它的位置和您用鼠标单击的坐标之间的差值,然后对其进行规格化,就可以得到要遵循的方向

Vector2 direction = new Vector2(mouse.X, mouse.Y) - Paullocation;
direction.Normalize();

Paullocation += direction * speed;

如果
Paullocation
是一个
Vector2
,您只需计算它的位置和您用鼠标单击的坐标之间的差值,然后对其进行规格化,就可以得到要遵循的方向

Vector2 direction = new Vector2(mouse.X, mouse.Y) - Paullocation;
direction.Normalize();

Paullocation += direction * speed;

如果
Paullocation
是一个
Vector2
,您只需计算它的位置和您用鼠标单击的坐标之间的差值,然后对其进行规格化,就可以得到要遵循的方向

Vector2 direction = new Vector2(mouse.X, mouse.Y) - Paullocation;
direction.Normalize();

Paullocation += direction * speed;

如果
Paullocation
是一个
Vector2
,您只需计算它的位置和您用鼠标单击的坐标之间的差值,然后对其进行规格化,就可以得到要遵循的方向

Vector2 direction = new Vector2(mouse.X, mouse.Y) - Paullocation;
direction.Normalize();

Paullocation += direction * speed;


你为什么用cos/sin?在这种情况下,它们对我来说没有意义。我需要找到从鼠标创建的虚拟三角形的角度和对象的位置,以计算出要添加多少“x”和多少“y”。为什么要使用cos/sin?在这种情况下,它们对我来说没有意义。我需要找到从鼠标创建的虚拟三角形的角度和对象的位置,以计算出要添加多少“x”和多少“y”。为什么要使用cos/sin?在这种情况下,它们对我来说没有意义。我需要找到从鼠标创建的虚拟三角形的角度和对象的位置,以计算出要添加多少“x”和多少“y”。为什么要使用cos/sin?在这种情况下,它们对我来说没有意义。我需要找到从鼠标创建的虚拟三角形的角度和对象的位置,以计算出要添加多少“x”和多少“y”。Vector2的结构及其方法非常有用,你应该看看:)我如何更改它,以便一旦它碰到鼠标,它将以相同的角度反弹(如果它向东北方向30度,它会击中鼠标并向东南方向反弹30度)?只需将
方向
乘以
-1
,但我认为您需要将该变量声明为类变量。
向量2
结构及其方法非常有用,你应该看一看:)我该如何改变它,使它一旦击中鼠标,就会以相同的角度反弹(如果它向东北30度,它击中鼠标,然后向东南30度反弹)?只需将
方向
乘以
-1
,但是我认为您需要将该变量声明为类变量。
Vector2
结构及其方法可能非常有用,您应该看看:)我将如何改变它,使它一旦碰到鼠标,就会以相同的角度反弹(如果它向东北30度,它会碰到鼠标,然后向东南30度反弹)?只需将
方向
乘以
-1
,但我认为您需要将该变量声明为类变量。
Vector2
结构及其方法可能非常有用,您应该看一看:)我如何更改它,使它一旦碰到鼠标,就会以相同的角度反弹(如果它向东北方向30度,它会点击鼠标,然后向东南方向反弹30度)?只需将
方向
乘以
-1
,但我认为您需要将该变量声明为类变量。