4

我正在阅读有关 python 街机的教程,并想知道一个函数如何/为什么工作。

有一个函数名为on_draw(delta_time)

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

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

4

1 回答 1

4

无法弄清楚图书馆如何知道保持时钟运行。

该库使用时钟定期调用您的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此处记录如下:

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

安排一个函数每隔间隔秒自动调用一次。

...遗憾的是,他们并没有更具体地说明函数的调用方式(即使用哪些参数,如果有的话)——我们必须查看源代码,即省略了文档字符串:

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

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


挖掘文档schedule_interval (为简洁明了而编辑——我的粗体文本)

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

安排每间隔秒调用一个函数。

该函数应该有一个原型,其中包含dt作为第一个参数,它给出了自上次调用以来经过的时间(以秒为单位) 。给这个函数的任何附加参数都会传递给回调:

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

参数:

  • func ( callable) – 计时器到时时调用的函数。
  • interval ( float) – 每次调用之间等待的秒数。

在这里你有它:它说你的函数将以经过的时间作为第一个参数来调用。 (好吧,我不得不编辑那部分,但我确定这就是他们的意思!)


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

于 2019-08-10T23:59:36.210 回答