Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 其中';是Pyglet主回路吗?_Python_Pyglet - Fatal编程技术网

Python 其中';是Pyglet主回路吗?

Python 其中';是Pyglet主回路吗?,python,pyglet,Python,Pyglet,考虑以下示例: import pyglet def foo(): print("I'm in a loop...") def main(): w = pyglet.window.Window() @w.event def on_draw(): foo() pyglet.app.run() return 0 if __name__ == '__main__': main() 我真的希望on_draw()能够在内

考虑以下示例:

import pyglet

def foo():
    print("I'm in a loop...")

def main():

    w = pyglet.window.Window()

    @w.event
    def on_draw():
        foo()

    pyglet.app.run()

    return 0

if __name__ == '__main__':
    main()
真的希望on_draw()能够在内部主循环中绘制东西,但是


它愚弄了我,只执行一次代码Pyglet实际主循环在哪里?这样我就可以真正地更新那里的东西,而不是只画一次(这是无用的)。

我想你正在寻找类似的东西。实际上,我以前从未使用过
pyglet
,但在中,它基本上使用了:

pyglet.clock.schedule_interval(update, 1/120.0)
因此,您可以执行以下操作:

import pyglet

def foo(value):
    print("I'm in a loop...")

def main():
    w = pyglet.window.Window()
    @w.event
    def on_draw():
        foo(None)
    pyglet.clock.schedule_interval(foo, 1.0)
    pyglet.app.run()

main()

再说一次,我不是这方面的专家。可能还有更好的方法。

EventLoop类包含run方法(pyglet.app.run),基本上是“主循环”。它管理计划的事件,让进程休眠,并管理来自操作系统的事件。通过检查源代码,您可以了解它是如何工作的。您可以在pyglet/app/base.py中找到它

为了阐明代码片段无法按预期工作的原因,pyglet仅在pyglet执行了计划事件或被操作系统显式标记为无效时才会绘制事件;逻辑是,如果没有触发会改变屏幕的事件,为什么要绘制屏幕?如果您试图安排一个称为应用程序循环的每次迭代的事件,那么请使用pyglet.clock.schedule


我从来没有想到会有这样的哈哈(为每个单独的功能设置时间/间隔)。这有点奇怪(或者我太习惯SDL/Allegro/Pygame了)。@RederickDeathwill我也认为这很奇怪。我们应该阅读所有文档,以确保它是正确的使用方法。或者,也许其他专家可以对这条轨道发表评论。在文档中。非常有趣…以上链接从今天起已断开。以上链接应替换为:和。