如何使用C#将对象移至Windows表单中的设置最大速度到鼠标

问题描述 投票:0回答:1
问题是我不能以一定速度使对象跟随我的鼠标。我设法使它遵循鼠标,但是它会提高速度,越远,并且越靠近它。 我尝试这样做

Xspeed = (mousePosition.X - object.Left) / 20; Yspeed = (mousePosition.Y - object.Top) / 20; x = x + Xspeed; y = y + Yspeed; object.location = new Point(x, y);

但它没有做我想做的事情。
	
首先,我强烈建议将点/向量用于此类事物,因为它使它变得更加容易,并消除了手工写出所有数学的需求。我正在使用system.numerics.vector2用于此示例,但是有很多矢量库可以正常工作,或者您可以编写自己的。

基本思想是将矢量分为方向和速度组件,并限制速度。

var objToMouse = mousePosition - object.location; var speed = objToMouse.Length(); speed = Math.Min(speed, MaxSpeed); // clamp the speed var deltaPos = Vector2.Normalize(objToMouse) * speed; object.location += deltaPos;
c# winforms vector position mouse
1个回答
0
投票
在计时器中将此代码运行应为您带来鼠标指针的最大运动速度。您可以考虑使用秒表来测量每个计时器之间的时间,以使您的速度独立于计时器间隔,并弥补间隔的变化。

注意,您可能必须在Winforms和您使用的任何矢量库之间编写一些转换代码。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.