[英]Moving object with mouse smoothly
我希望我的物体跟随鼠标所在的位置,例如点击游戏。 问题是,虽然我可以使对象移动到鼠标单击的位置,但不能使其平滑进行。 例如,我要将对象从A点移动到B点 。 我可以以45°角移动它,直到它具有与单击鼠标相同的轴之一,然后像这样使它笔直移向另一个轴。 但是我不知道如何使它像这样平稳地移动。
我这样移动我的对象:
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_delta = cos(direction)*speed;
y_delta = sin(direction)*speed;
x_position+=x_delta;
y_position+=y_delta;
每一步移动的总距离取决于浮动speed
。
要向特定位置行驶,您可以创建一个条件来防止您的物体以比最终距离快的速度移动,例如:
if(mvtEnabled){
float tempDst = object.dst(x_final, y_final);
if(speed>tempDst){
update(tempDst);
mvtEnabled = false;
}else{
update(speed);
}
}
其中update
根据给定的速度更新位置。 每次单击时,将mvtEnabled
设置为true,并重新计算最终坐标。
您可以通过以下方式获取起始位置和最终位置之间的角度:
float direction = atan2(y_final - y_start, x_final - x_start);
并在更新对象的位置时使用此角度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.