我目前正在尝试在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:顶部,左侧)跳到鼠标位置,而是用鼠标从其当前位置平稳地移动。
X
和Y
的数学正确吗?
在调试和尝试不同的方法时,我了解到:
Position
设置为e.X,Y
可使移动平稳。
答案 0 :(得分:2)
拖动过程阶段:
从MouseDown开始:
-检查物体是否被触摸
-请记住ObjectPos0
,MousePos0
-设置isDragging
标志(表示MouseDown在对象上)
在MouseMove上(如果为isDragging
):
-ObjectPos = ObjectPos0 + (MousePos - MousePos0)
-重画
在MouseUp上(如果为isDragging
):
-确定最终位置
-进行必要的工作
-清除isDragging
标志