用鼠标移动物体?

Moving object with mouse?

我目前正在尝试在 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: top, left)跳到鼠标位置,而是从当前位置顺着鼠标移动。


清晰度

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

拖动过程阶段:

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

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

在 MouseUp 上(如果 isDragging):
- 修复最终位置
- 做需要的工作
- 清除 isDragging 标志