用鼠标移动物体?

Posted

技术标签:

【中文标题】用鼠标移动物体?【英文标题】:Moving object with mouse? 【发布时间】:2019-04-04 22:24:21 【问题描述】:

我目前正在尝试在 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)跳转到鼠标位置,而是用鼠标从当前位置平滑移动。


清晰度

我分配XY 的数学运算是否正确? 是:还有什么可能导致此跳跃? 否:正确的数学是什么?

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

Position 设置为仅e.X,Y 可提供流畅的移动。 但是,这会跳转到不需要的鼠标位置。

【问题讨论】:

【参考方案1】:

拖动过程阶段:

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

在鼠标移动时(如果 isDragging): - ObjectPos = ObjectPos0 + (MousePos - MousePos0) - 重绘

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

【讨论】:

以上是关于用鼠标移动物体?的主要内容,如果未能解决你的问题,请参考以下文章

新人求教unity 2d 物体跟随鼠标移动的问题

Unity笔记物体朝着鼠标位置移动

threejs设置物体位置

unity3d 2D平面游戏实现鼠标拖拽物体移动

Unity2D中使用鼠标拖动物体移动

鼠标控制物体移动