pyglet游戏循环究竟是如何工作的?

时间:2013-06-07 00:56:12

标签: python pyglet

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

谢谢!

1 个答案:

答案 0 :(得分: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!
>>>

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