2

我已经阅读了我能找到的所有内容,并查看了 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)并且它以某种方式找到并调用你附加处理程序的那些函数?它如何知道在哪个范围/命名空间中找到它们?它是否只是扫描您的整个代码,直到找到您放置事件处理程序的位置?它会绕过它们吗?它如何知道在哪里开始和停止循环?它是如何工作的???

谢谢!

4

1 回答 1

2

让我们玩:

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!
>>>

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

于 2013-06-07T01:12:01.437 回答