【问题标题】:c# moving rectangles vs moving panels on timer.tick (as speed)c# 在 timer.tick 上移动矩形与移动面板(作为速度)
【发布时间】:2013-06-09 09:05:25
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    虽然定时器的间隔是 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 属性的程度。间隔是固定的,因此您获得的运动量取决于位置的增量。哪个不会是一个像素,可能是您现在使用的。

    【讨论】:

    • 我想要一个答案,你写了一篇文章,非常感谢你提供这些信息并慢慢来:) 实际上我正在为一个由 6 个同步工作的电机构建的机器人生成脉冲,并且用简单的语言管理它们。所以 fps 似乎足以让人眼看到运动,但我想知道这些电机的脉冲是在 10,5 或 1 毫秒内产生的,所以我可以知道它们的位置。再次感谢汉斯。
    • 那个问题会有完全不同的答案。我已经wrote one
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多