2013-06-07 3 views
1

내가 찾을 수있는 모든 것을 읽었으며 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

'@ game_window.event'는 실질적으로 무엇이든 할 수 있습니다. 그것을 찾을 필요가 없습니다 - 자바에서 주석과 달랐습니다. 이것은 본질적으로 명령입니다. – Elazar

답변

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

,하지만 난 당신이 기본적인 아이디어를 얻을 바랍니다.

+1

감사합니다. 나는 장식자가 어떻게 작동하는지 완전히 오해하고 있다는 것을 알았다. 필자는 파이썬 프로그래머가 아닌 제 친구와 이야기를 나누었고, '파이썬에서 밟아서, 볼륨 2'에서 클로저와 데코레이터에 대한 장을 읽고 이틀 동안 답변을 묵상했습니다 ... 그리고 이제는 이해합니다! 고맙습니다. – Josh

관련 문제