我希望让播放器以较慢的速度移动到光标的最后点击位置。我试过这个并且只将它作为常量实现(玩家不断跟随光标)。我不希望发生这种情况,我只希望它在窗口内点击时能够正常工作。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void MouseDown(object sender, MouseEventArgs e)
{
tmrMoving.Enabled = true;
Invalidate();
}
private void tmrMoving_Tick(object sender, EventArgs e)
{
player.Location = (Cursor.Position);
Invalidate();
}
}
有什么建议/方法吗?
修改 我已经编辑了你的代码Henrik,但现在我有一个double => int问题有什么决心吗?
private void tmrMoving_Tick(object sender, EventArgs e)
{
var xdiff = Cursor.Position.X - player.Location.X;
var ydiff = Cursor.Position.Y - player.Location.Y;
var diff = Math.Sqrt(xdiff + ydiff);
// xdiff = player.Location.X;
// ydiff = player.Location.Y;
}
答案 0 :(得分:1)
替换
player.Location = (Cursor.Position);
通过类似的东西
var diff = Cursor.Position - new System.Windows.Point(player.Location.X,player.Location.Y);
var speed = Math.Sqrt( diff.X * diff.X + diff.Y * diff.Y);
if (speed > 10)
{
diff.X /= speed / 10;
diff.Y /= speed / 10;
}
player.Location += new System.Drawing.Point( (int)diff.X, (int)diff.Y);
答案 1 :(得分:1)
我在这里看不到的是计时器停止处理的时间。 在我看来,基本步骤可能如下所示:
Queue<T>
点击鼠标并启动计时器在计时器处理程序中,获取在“队列”中输入的第一个点并将其保存在某个字段(curPointToProcess
??)中。
将对象移动到每个刻度线上的点。速度受到控制,或者按照刻度的频率或每个刻度移动的对象数量,或两者。
一旦物体到达该点,检查Queue<T>
MouseDown
当您将对象移向该点时,您必须有某种Queue<T>
原因,用户可能会疯狂地点击其他点,您需要保存它们并按顺序依次处理,除非您的设计期待别的东西。