c#移动矩形与timer.tick上的移动面板(作为速度)

时间:2013-06-09 09:05:26

标签: c# user-interface timer drag-and-drop drawing

我有一个计时器。当它滴答时,通过基于公式计算,12个面板的位置会发生变化。

问题是,虽然计时器的间隔是1毫秒,但移动速度非常慢。有很多计算。使用绘图类或其他方法可以做些什么来提高速度?

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

1 个答案:

答案 0 :(得分:2)

  

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

这是核心问题,计时器不能快速打勾。实际的定时器分辨率受操作系统的时钟中断率的限制。在大多数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属性的程度。间隔是固定的,因此您获得的运动量由位置的增量决定。哪个是一个像素,可能就是您现在使用的像素。