光标、点、差异。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
表示两者相同。。