用鼠标移动物体?
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);
}
}
我认为这主要是由于我设置 X
和 Y
值的方式所致。我在这里正确地做数学还是导致我的问题的原因?我之所以选择这样写,是因为我不想让贴图的原点(0, 0: top, left)跳到鼠标位置,而是从当前位置顺着鼠标移动。
清晰度
- 我分配
X
和 Y
的数学正确吗?
- 是:还有什么可能导致这种跳跃?
- 否:正确的数学是什么?
在调试和尝试不同的方法时,我了解到:
- 将
Position
设置为 e.X,Y
即可实现流畅的移动。
- 但是,这会跳转到不需要的鼠标位置。
拖动过程阶段:
从 MouseDown 开始:
- 检查对象是否被触摸
- 记住 ObjectPos0
、MousePos0
- 设置 isDragging
标志(表示 MouseDown 在对象上)
在 MouseMove 上(如果 isDragging
):
- ObjectPos = ObjectPos0 + (MousePos - MousePos0)
- 重绘
在 MouseUp 上(如果 isDragging
):
- 修复最终位置
- 做需要的工作
- 清除 isDragging
标志
我目前正在尝试在 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
的数学正确吗?- 是:还有什么可能导致这种跳跃?
- 否:正确的数学是什么?
在调试和尝试不同的方法时,我了解到:
- 将
Position
设置为e.X,Y
即可实现流畅的移动。- 但是,这会跳转到不需要的鼠标位置。
拖动过程阶段:
从 MouseDown 开始:
- 检查对象是否被触摸
- 记住 ObjectPos0
、MousePos0
- 设置 isDragging
标志(表示 MouseDown 在对象上)
在 MouseMove 上(如果 isDragging
):
- ObjectPos = ObjectPos0 + (MousePos - MousePos0)
- 重绘
在 MouseUp 上(如果 isDragging
):
- 修复最终位置
- 做需要的工作
- 清除 isDragging
标志