C# 用鼠标移动物体?

C# 用鼠标移动物体?,c#,math,drag-and-drop,mouseevent,draggable,C#,Math,Drag And Drop,Mouseevent,Draggable,我目前正在尝试在SharpDX中移动2D纹理。我可以成功地移动它,但每隔几帧它就会跳很多。例如,如果我从底部、从右到上、从左拖动,我会偶尔跳到图像原点位于底部75%的位置,然后再跳到几帧后的位置。在我看来,这很奇怪,我认为这可能是由于事件或鼠标位置造成的 我正在通过表单上的MouseMove事件更新纹理的位置: private void MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Le

我目前正在尝试在SharpDX中移动2D纹理。我可以成功地移动它,但每隔几帧它就会跳很多。例如,如果我从底部、从右到上、从左拖动,我会偶尔跳到图像原点位于底部75%的位置,然后再跳到几帧后的位置。在我看来,这很奇怪,我认为这可能是由于事件或鼠标位置造成的

我正在通过表单上的MouseMove事件更新纹理的位置:

private void MouseMove(object sender, MouseEventArgs e) {
    if (e.Button == MouseButtons.Left) {
        testSprite.Position = new Vector2(e.X - testSprite.Position.X,
                                          e.Y - testSprite.Position.Y);
    }
}
我认为这主要是由于我设置
X
Y
值的方式。我在这里算对了吗?还是这就是导致我的问题的原因?我选择这样写是因为我不希望纹理的原点(0,0:top,left)跳到鼠标位置,而是希望鼠标从当前位置平稳移动


清晰
  • 我分配
    X
    Y
    的数学正确吗?
    • 是:还有什么可能导致这种跳跃
    • 不,正确的数学是什么
在调试和尝试不同的方法时,我了解到:

  • 位置
    设置为刚好
    e.X,Y
    可实现平稳移动。
    • 但是,这会跳到不需要的鼠标位置

拖动过程阶段:

从鼠标向下开始:
-检查是否触摸到物体
-记住
ObjectPos0
MousePos0

-设置
isDraging
标志(表示鼠标向下移动在对象上)

在MouseMove上(如果
isDragging
):
-
ObjectPos=ObjectPos0+(MousePos-MousePos0)

-重画

在鼠标上(如果
isDragging
):
-固定最终位置
-做必要的工作

-清除
isDraging
标志

拖动过程阶段:

从鼠标向下开始:
-检查是否触摸到物体
-记住
ObjectPos0
MousePos0

-设置
isDraging
标志(表示鼠标向下移动在对象上)

在MouseMove上(如果
isDragging
):
-
ObjectPos=ObjectPos0+(MousePos-MousePos0)

-重画

在鼠标上(如果
isDragging
):
-固定最终位置
-做必要的工作
-清除
isDraging
标志