delta_time 如何在 python 街机上工作?

How does delta_time work on python arcade?

我正在阅读 python arcade 上的教程,想知道 how/why 一个功能是否有效。

有一个名为on_draw(delta_time)

的函数

我查看了 arcade 的代码,但无法弄清楚图书馆是如何知道保持时钟的 运行。有人可以帮助我了解它的工作原理和原因吗?

这里有一个例子:http://arcade.academy/examples/bouncing_rectangle.html#bouncing-rectangle

can’t figure out how the library knows to keep the clock running.

该库使用 时钟 定期调用您的 on_draw 函数,将经过的时间(以秒为单位)作为参数传递给它

既然你询问了关于如何这一切的细节,让我们来看看:


一切都从您的 main() 函数开始。您正在呼叫:

    # Tell the computer to call the draw command at the specified interval.
    arcade.schedule(on_draw, 1 / 80)

所以你在调用 arcade.schedule 传递 on_draw.

的引用

好吧,我们去兔子洞!


arcade.schedule 记录 here 如下:

arcade.schedule(function_pointer: Callable, interval: numbers.Number)

Schedule a function to be automatically called every interval seconds.

...遗憾的是他们没有更具体地说明 如何 函数被调用(即使用什么参数,如果有的话)——我们必须看看docstring 省略的来源:

def schedule(function_pointer: Callable, interval: Number):
    pyglet.clock.schedule_interval(function_pointer, interval)

就是这样!它基本上是将工作委托给 pyglet.clock.schedule_interval,在这里,我们不知道它传递给我们函数的参数是什么...我的意思是我们有点想法,但你要求一个证明,所以你会得到一个证明!


挖掘 docs for schedule_interval (为简洁明了而编辑 -- 粗体 我的文本):

schedule_interval(func, interval, *args, **kwargs)

Schedule a function to be called every interval seconds.

The function should have a prototype that includes dt as the first argument, which gives the elapsed time, in seconds, since the last time it was called. Any additional arguments given to this function are passed on to the callback:

def callback(dt, *args, **kwargs):
  pass

Parameters:

  • func (callable) – The function to call when the timer lapses.
  • interval (float) – The number of seconds to wait between each call.

给你:它说你的函数将以经过的时间作为第一个参数被调用。 (好吧,我不得不编辑它参与其中,但我确定这就是他们的意思!)


现在,请不要问我 pyglet.clock 内部是如何工作的 ;)