我如何创建一个函数来处理每个毫秒? - 页 3

 
Dmitry Fedoseev:

事实上,模拟CRT电视使用隔行扫描,但只是因为在那些日子里,他们无法在给定的带宽内做出完整的帧,产生偶数,然后是奇数,而且由于电子管余辉,闪烁是不可见的。我不仅读过书,而且作为一个学生,我还做过不少修理电视的偷工减料工作 ))

 
Alexey Volchanskiy:

事实上,模拟CRT电视有隔行扫描,但只是因为在那些年里,他们无法在给定的带宽内制作全帧,他们先制作偶数行,然后是奇数行,由于电子管余辉,闪烁是不可见的。我不仅读过书,而且作为一个学生,我在修理电视时曾做过不少黑活 ))

我不知道应该有多少个框架。我没有读过任何这样的书。但最主要的是,我现在已经做到了,而且运作良好。当然,我还没有完全想明白,但我已经有了可以坚持的东西。
 
Nikolay Demko:

ChartRedraw函数 的代价是40毫秒,所以在16之后更新计时器是没有意义的。

40毫秒对应于每秒25帧,相当于人类的感知速度。

嗯,不,尼古拉,当然比这少。在我的电脑上,使用COLOR_FORMAT_ARGB_NORMALIZE时不到2毫秒,使用COLOR_FORMAT_XRGB_NOALPHA时则不到1毫秒。

你可以从所附的样本脚本(TestSpeedCanv.ex5)中看到,30毫秒的帧延迟(32帧)对你的眼睛来说是绝对足够的。顺便说一下,所有视频都是以这个速度拍摄的。当需要慢动作播放时,会使用较高的帧率。

附加的文件:
 
Реter Konow:

定时器功能的最大频率为15-16毫秒。

是的,它是。(仅仅不是频率,而是周期。 最大频率=64赫兹)

只是要补充说明一下。

计时器的周期步骤=15.625毫秒。

即用EventSetMillisecondTimer(1)命令和EventSetMillisecondTimer(10)命令,实际周期为15.625ms。

使用EventSetMillisecondTimer(21)命令时,实际周期为31.25ms,使用EventSetMillisecondTimer(30)命令时,实际周期为31.25ms。

通过EventSetMillisecondTimer(95)命令和EventSetMillisecondTimer(105)命令,实际周期为109.375 ms。

等。

附加的文件:
 
Alexey Volchanskiy:

事实上,模拟CRT电视有隔行扫描,但只是因为在那些年里,他们无法在给定的带宽内制作全帧,他们先制作偶数行,然后是奇数行,由于电子管余辉,闪烁是不可见的。我不仅读过书,而且作为一个学生,我还做过不少修理电视的偷工减料工作 ))

是的,625线和所有这些。第一批自制游戏(不是电脑游戏--组装在单个芯片上)通常使用312行。小时候玩过:曲棍球、网球......。
 
Alexey Volchanskiy:

事实上,模拟CRT电视有隔行扫描,但只是因为在那些年里,他们无法在给定的带宽内制作全帧,他们先制作偶数行,然后是奇数行,由于电子管余辉,闪烁是不可见的。我不仅看书,而且作为一个学生,我曾经在电视维修方面做了相当好的转变)。

那么?你不是被教导说,在视频中,每秒24帧就足以产生自然的均匀 运动效果吗?而闪烁的问题是显示器(电视)的问题。

 
Dmitry Fedoseev:

那么?你不是被告知在视频中,每秒24帧就足以提供自然均匀的运动效果吗?而闪烁的问题是显示器(电视)的问题。

现在连手机都有50帧的视频了)

用24帧和50帧拍摄同样的东西,快速运动,并进行比较。

ps.查理-查普林拍摄了15帧,这已经足够了)

 
Alexey Volchanskiy:

事实上,模拟CRT电视有隔行扫描,但只是因为在那些年里,他们无法在给定的带宽内制作全帧,他们先制作偶数行,然后是奇数行,由于电子管余辉,闪烁是不可见的。我不仅读过书,而且作为一个学生,我在修理电视时曾做过不少黑活 ))

是的,但那些半边框是不同的,不是来自同一个框架。
也正因为如此,动作比电脑上的25 fps更流畅。

 
Taras Slobodyanik:

即使是手机现在也有50帧的视频)

以24帧和50帧拍摄同样的东西,快速运动,并进行比较。

ps.查理-查普林拍摄15帧--绰绰有余)

知识的深度令人惊叹!......感知的微妙!......。通常大家都会在查理-卓别林的电影中看到抽搐和不自然的动作。

 
Nikolai Semko:

是的,它是。(仅仅不是频率,而是周期。 最大频率=64赫兹)

只是要补充说明一下。

计时器的周期步骤=15.625毫秒。

即用EventSetMillisecondTimer(1)命令和EventSetMillisecondTimer(10)命令,实际周期为15.625ms。

使用EventSetMillisecondTimer(21)命令时,实际周期为31.25ms,使用EventSetMillisecondTimer(30)命令时,实际周期为31.25ms。

通过EventSetMillisecondTimer(95)命令和EventSetMillisecondTimer(105)命令,实际周期为109.375 ms。

等。

谢谢你的更正,尼古拉。

我没有测量过这样准确的周期,但我注意到有一些周期是跳过的。该频率并不理想。特别是在小周期值的范围内(16-25ms)。因此,如果我把它设置为16毫秒,那么停顿的时间往往会是32毫秒。

在周期的频率上有一种失败。这是一种电子心律失常。


所以,我在想,如果我设置一个40毫秒的周期(这对于人类的感知来说已经足够了),而计时器跳过一些周期,会怎么样?那么我们就不会得到每秒24帧,而是18-24帧。取决于定时器会跳过多少个时段。我认为最好的选择是定时器周期为25ms。这是我最初为自己设定的目标。