0

我有一个计时器。打勾时,根据公式计算,12个面板的位置发生变化。

问题是,虽然定时器的间隔是1毫秒,但动作却很慢。计算量很大。可以做些什么来提高速度,使用绘图类或其他东西?

gui显示位置,我可以通过单击来移动面板,所以值。如果正确的方法是绘图类,我是否有机会通过单击移动矩形并获取它们的值?

4

1 回答 1

2

虽然计时器的间隔是 1 毫秒

这是核心问题,Timer 不能这么快滴答作响。实际的定时器分辨率受操作系统时钟中断率的限制。在大多数 Windows 机器上每秒滴答 64 次。或每 15.625 毫秒一次。因此,您希望获得的最小间隔是 16 毫秒。因此,这些面板现在的移动速度可能比您希望的慢 16 倍。

请记住这是如何观察到的,您只需要保持人眼快乐。他们无法感知任何以 1 毫秒的速度变化的东西,任何更新速度超过每秒 25 次的东西看起来都像是模糊的。在电视和电影院中利用的东西,电影以每秒 24 帧的速度更新。每 42 毫秒一次。

因此,Timer.Interval 的合理设置是低于时钟中断率的三倍,即 46 毫秒。在普通机器上,实际滴答间隔将为 3 x 15.625 = 46.875 毫秒。如果机器以更高的时钟中断率运行,仍然接近 46 毫秒。您将获得 21 fps 的等效帧速率。就在人眼模糊的边缘。下一个较低的正常速率是中断速率的两倍或 32 fps 的 31 毫秒。让它更小是没有意义的,它是不可观察的,只会消耗 cpu 时间而没有任何好处。

而且,重要的是,面板移动的速率现在取决于您在 Tick 事件处理程序中更改其 Location 属性的程度。间隔是固定的,因此您获得的运动量取决于位置的增量。这不会是一个像素,可能是您现在使用的。

于 2013-06-09T12:14:01.460 回答