【问题标题】:How exactly does the pyglet game loop work?pyglet 游戏循环究竟是如何工作的?
【发布时间】:2013-06-07 00:56:11
【问题描述】:

我已经阅读了我能找到的所有内容,并查看了 pyglet 上的许多游戏循环示例,但我仍然不确定它是如何工作的或到底发生了什么。

(这些是我看过的文章……)

http://www.pyglet.org/doc/programming_guide/the_application_event_loop.html

http://www.pyglet.org/doc/api/toc-pyglet.event-module.html

我了解基本结构是这样的(这只是一个例子):

INITIALIZE GAME WINDOW
game_window = pyglet.window.Window(800, 600)

ATTACH EVENT HANDLERS
@game_window.event
def on_draw():
    game_window.clear()
    player_sprite.draw()

START PYGLET
pyglet.app.run()

我知道这一切都在实践中有效,但我不太明白。而且我觉得除非我很好地掌握了机制,否则我将无法充分利用 pyglet。

所以你告诉 pyglet 运行并且......它找到具有事件的对象(game_window)并且它以某种方式找到并调用你附加处理程序的那些函数?它如何知道在哪个范围/命名空间中找到它们?它是否只是扫描您的整个代码,直到找到您放置事件处理程序的位置?它会绕过它们吗?它如何知道在哪里开始和停止循环?它是如何工作的???

谢谢!

【问题讨论】:

  • @game_window.event 几乎可以做任何事情。它不需要找到它——它不像 java 中的注解。它本质上是一个命令。

标签: python pyglet


【解决方案1】:

我们来玩吧:

class Window:
    def __init__(self, x, y):
        global app
        app = self
    def event(self, func):
        self.what_todo = func
    def run(self):
        self.what_todo()

>>> game_window = Window(800, 600)
>>>
>>> @game_window.event
... def on_draw():
...     print("I am drawing!")
...
>>> app.run()
I am drawing!
>>>

当然,他们做事可能有点不同,但我希望你能明白基本的想法。

【讨论】:

  • 谢谢!我现在意识到我完全误解了装饰器的工作原理。我和我的一个(非 Python)程序员朋友讨论了这个问题,阅读了“Python 入门,第 2 卷”中关于闭包和装饰器的章节,并沉思了两天你的答案......现在我明白了!谢谢。
猜你喜欢
  • 2016-02-15
  • 1970-01-01
  • 2011-06-26
  • 2021-08-15
  • 2012-06-08
  • 2011-10-11
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多