【发布时间】:2014-03-06 01:16:31
【问题描述】:
我希望我的对象跟随鼠标所在的位置,就像点击游戏一样。问题是,虽然我可以让我的对象移动到鼠标点击的地方,但我不能让它顺利进行。例如,我想从point A to point B 移动我的对象。我可以将它以 45° 角移动,直到它具有与我的鼠标单击相同的轴之一,然后让它直接向另一个轴 like this 移动。但我不知道如何让它顺利移动,like this。
我用这个移动我的对象:
private void Game_MouseMove(object sender, MouseEventArgs e)
{
if (IsMouseDown == true)
{
_xClick = e.Location.X;
_yClick = e.Location.Y;
timerClickMovement.Enabled = true;
}
}
private void Game_MouseDown(object sender, MouseEventArgs e)
{
IsMouseDown = true;
}
private void Game_MouseUp(object sender, MouseEventArgs e)
{
IsMouseDown = false;
}
private void timerClickMovement_Tick(object sender, EventArgs e)
{
if (_x != _xClick || _y != _yClick)
{
//_x and _y is the location of the object I want to move.
if (_x > _xClick)
{ _x--; }
else if (_x < _xClick)
{ _x++; }
if (_y > _yClick)
{ _y--; }
else if (_y < _yClick)
{ _y++; }
Invalidate();
}
else
{ timerClickMovement.Enabled = false; }
}
怎样做才能让动作更直接?
【问题讨论】:
-
根据距离和 x 和 y 的差值计算运动。然后不要只移动 1 个像素,而是移动你的“差异级别”。例如如果 x 和 xtarget 相距 100px,并且 y 和 ytarget,则每滴答移动 x 1px,每滴答移动 y 2px
-
您的意思是将较大的数字除以较小的数字,以计算出每一步移动较大的数字需要多少空间?因为我已经尝试过了,而且我一直得到除以零的错误,尽管我输入了一个 if 语句,它只会在两个变量都没有 0 的情况下进行计算。
-
是的,像 _xdistance = _xClick - x,y 也一样,然后 _xstepSize = _xdistance / _ydistance;然后 x+=_xStepSize 而不是 x++,应该可以工作,但不是很优雅,只有在 _xClick 高于 x 时才有效
标签: c# winforms mouseevent game-physics mousemove