光标、点、差异。WinForms中的C#

光标、点、差异。WinForms中的C#,c#,winforms,C#,Winforms,我整个星期都在编写这段代码,到目前为止还没有完全解决我遇到的错误的答案。错误在var diff=Cursor.Position-playerPoint行上,发生此错误的原因是您无法在窗口点和绘图点之间使用(-)操作数,但转换该操作数的编码似乎只转换它所涉及的表达式 注释掉的代码是对同一方法的不同尝试,但它会产生相同的错误。有人知道这件事吗 private void tmrMoving_Tick(object sender, object value, Type targetType,

我整个星期都在编写这段代码,到目前为止还没有完全解决我遇到的错误的答案。错误在
var diff=Cursor.Position-playerPoint行上
,发生此错误的原因是您无法在
窗口点
绘图点
之间使用(-)操作数,但转换该操作数的编码似乎只转换它所涉及的表达式

注释掉的代码是对同一方法的不同尝试,但它会产生相同的错误。有人知道这件事吗

private void tmrMoving_Tick(object sender, object value, Type targetType,
            object parameter, CultureInfo culture, EventArgs e)
        {
            System.Drawing.Point dp = (System.Drawing.Point)value;
            var playerPoint = new System.Windows.Point(dp.X, dp.Y);

            var cursPoint = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y);
           // var playerPoint = new System.Windows.Point(player.Location.X, player.Location.Y);
            var diff = Cursor.Position - playerPoint;
            var speed = Math.Sqrt(diff.X * diff.X + diff.Y * diff.Y);
            if (speed > 10)
            {
                diff.X /= speed / 10;
                diff.Y /= speed / 10;
            }
            player.Location += new System.Drawing.Point((int)diff.X, (int)diff.Y);
        }
编辑 如果无法通过上述代码查看某个方法,则可能存在以下解决方案:

private void tmrMoving_Tick(object sender, object value, Type targetType,
        object parameter, CultureInfo culture, EventArgs e)
    {

        var cursPoint = new System.Windows.Point(Cursor.Position.X, Cursor.Position.Y);
        var playerPoint = new System.Windows.Point(player.Location.X, player.Location.Y);
        var diff = Cursor.Position - playerPoint;
        var speed = Math.Sqrt(diff.X * diff.X + diff.Y * diff.Y);
        if (speed > 10)
        {
            diff.X /= speed / 10;
            diff.Y /= speed / 10;
        }
        player.Location += new System.Drawing.Point((int)diff.X, (int)diff.Y);
    }

由于
Cursor
是一个Windows窗体/GDI+类,您使用
System.Windows.Point
表示您使用了WPF,因此您遇到了问题。这些类不可相互交换

如果您使用的是WPF:而不是
Cursor.Position
,则可以使用
Mouse.GetPosition(Application.Current.MainWindow)如前所述

如果使用WF:请始终使用
System.Drawing.Point
,而不是
System.Windows.Point


尽管如此,减去分数是不可能的。您应该自己编写,或者更好,构造一个新点并在构造函数调用中进行数学运算。

您可以直接在坐标上计算从一个点到下一个点的向量:

int diffX = dp.X - Cursor.Position.X;
int diffY = dp.Y - Cursor.Position.Y;
var speed = Math.Sqrt(diffX * diffX + diffy * diffY);
只要
dp
Cursor.Position
使用相同的坐标系,即
0,0
表示两者相同。