用鼠标移动物体?

时间:2018-10-31 17:05:14

标签: c# math drag-and-drop mouseevent draggable

我目前正在尝试在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);
    }
}

我认为这主要是由于我设置XY值的方式。我是在这里正确计算数学吗,还是造成我问题的原因?我之所以选择这种方式,是因为我不希望纹理的原点(0、0:顶部,左侧)跳到鼠标位置,而是用鼠标从其当前位置平稳地移动。


清晰度

  • 我分配XY的数学正确吗?
    • 是的:还有什么可能导致此 jump
    • 否:什么是正确的数学?

在调试和尝试不同的方法时,我了解到:

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

1 个答案:

答案 0 :(得分:2)

拖动过程阶段:

从MouseDown开始:
  -检查物体是否被触摸
  -请记住ObjectPos0MousePos0
  -设置isDragging标志(表示MouseDown在对象上)

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

在MouseUp上(如果为isDragging):
   -确定最终位置
   -进行必要的工作
   -清除isDragging标志