我正在阅读有关 python 街机的教程,并想知道一个函数如何/为什么工作。
有一个函数名为on_draw(delta_time)
我查看了街机的代码,但无法弄清楚图书馆如何知道保持时钟运行。有人可以帮助我了解它的工作原理和原因吗?
一个例子在这里:http ://arcade.academy/examples/bouncing_rectangle.html#bouncing-rectangle
无法弄清楚图书馆如何知道保持时钟运行。
该库使用时钟定期调用您的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
内部是如何工作的;)