delta_time 在 python arcade 上如何工作?

use*_*169 4 python timedelta game-loop 2d-games arcade

我\xe2\x80\x99m正在阅读Python Arcade上的教程,并且想知道一个函数如何/为什么工作。

\n\n

有一个函数叫on_draw(delta_time)

\n\n

我查看了街机的代码,但无法弄清楚该库如何知道保持时钟运行。有人可以帮助我理解它是如何工作的以及为什么工作吗?

\n\n

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

\n

hug*_*ugo 5

\n

can\xe2\x80\x99t 弄清楚库如何知道保持时钟运行。

\n
\n\n

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

\n\n

既然您询问了这一切是如何连接的详细信息,让我们看一下:

\n\n
\n\n

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

\n\n
    # Tell the computer to call the draw command at the specified interval.\n    arcade.schedule(on_draw, 1 / 80)\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以你正在调用arcade.schedule 传递对 的引用on_draw

\n\n

好吧,我们就进兔子洞吧!

\n\n
\n\n

arcade.schedule此处记录如下:

\n\n
\n
arcade.schedule(function_pointer: Callable, interval: numbers.Number)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n
\n\n

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

\n\n
\n
def schedule(function_pointer: Callable, interval: Number):\n    pyglet.clock.schedule_interval(function_pointer, interval)\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

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

\n\n
\n\n

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

\n\n
\n

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

\n\n

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

\n\n

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

\n\n
def callback(dt, *args, **kwargs):\n  pass\n
Run Code Online (Sandbox Code Playgroud)\n\n

参数:

\n\n
    \n
  • func ( callable) \xe2\x80\x93 定时器超时时调用的函数。
  • \n
  • Interval ( float) \xe2\x80\x93 每次调用之间等待的秒数。
  • \n
\n
\n\n

在这里,您已经看到了:它表示您的函数将以经过的时间作为第一个参数来调用。 (好吧,我必须编辑该部分,但我确信这就是他们的意思!)

\n\n
\n\n

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

\n