gpt4 book ai didi

python - delta_time 如何在 python arcade 上工作?

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:33 24 4
gpt4 key购买 nike

我正在浏览 python arcade 上的教程,想知道一个函数是如何工作的/为什么工作。

有一个名为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)

就是这样!它基本上是将工作委托(delegate)给 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 内部是如何工作的 ;)

关于python - delta_time 如何在 python arcade 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57446397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com