2015-01-22 3 views
1

저는 파이썬을 배우려고 노력해 왔습니다. 그러나 이벤트 구문이 나오는 부분을 이해하지 못합니다. 걸리는 값 등의 종류를 설명하고 우리는 0 내가 당신의 질문에 대답을 통해-생각이 코드는 어떻게됩니까?

def checkForKeyPress(): 
    if len(pygame.event.get(QUIT)) > 0: 
     terminate() 
    keyUpEvents = pygame.event.get(KEYUP) 
    if len(keyUpEvents) == 0: 
     return None 
    if keyUpEvents[0].key == K_ESCAPE: 
     terminate() 
    return keyUpEvents[0].key 
+1

더 자세히 설명해주세요. 그것은 파이 게임에 대한 올바른 구문이 아닙니다. – GLHF

+0

사실 파이 게임을 사용하여 만든 게임의 일부입니다. 그러나 어떤 종류의 값 pygame.event가 반환했는지 이해할 수 없었습니다. 이것이 바로 조건 비교에 사용 된 값과 관련하여 다소 혼란 스러웠습니다. – nerd0711

답변

3

같은 정수 값으로 어떻게 비교할 수 있습니다하십시오. pygame.event.get()은 0 개 이상의 이벤트가있는 목록 객체를 반환합니다. len()은 해당 목록에있는 항목 수를 반환합니다. 0과 비교하면 비어 있음 또는 기타 목록에 대해 알려줍니다.

def checkForKeyPress(): 

    #if I retrieve at least one quit event since I last checked 
    if len(pygame.event.get(QUIT)) > 0: 
     #quit the game 
     terminate() 

    #retrieve all the key release events since we last checked 
    keyUpEvents = pygame.event.get(KEYUP) 

    #if there are no key release events 
    if len(keyUpEvents) == 0: 
     #there was no key press, don't return anything 
     #and skip the rest of the method 
     return None 

    #if the user pressed the escape key 
    if keyUpEvents[0].key == K_ESCAPE: 
     #quit the game 
     terminate() 

    #if we haven't returned or quit already 
    #return the first key released since we last checked 
    return keyUpEvents[0].key 

이 코드에 대해 몇 가지 중요한 문제가 있습니다.

  1. 이 방법에는 명확한 목적이 하나도 없습니다. 그것은 게임을 종료하고 핵심 릴리스를 반환 담당입니다.
  2. 프레스 (KEYDOWN)를 확인하지는 않지만 릴리스 (KEYUP)는 부적절한 이름입니다.
  3. 키가 빨리 감겨지면 일부 주요 이벤트가 건너 뜁니다. 첫 번째 이벤트 만 반환되지만 모든 이벤트가 대기열에서 지워집니다.
  4. 이것이 이벤트 대기열에서 수행되는 유일한 검사 일 경우, 결국 대기열은 충분한 시간과 키 입력으로 사용 가능한 모든 메모리를 차지합니다.

시간을 좀 더 보내고 어디에서 왔는지를 살펴보면 몇 가지 문제가 발생할 수 있다고 확신합니다. 자신의 게임에서 이벤트를 처리 할 때 카운터 예제로 사용하십시오. 이 종류의 이벤트를 체크 아웃하는 방법은 much better and simpler examples입니다.

+0

고마워. 큰 도움이되었습니다. 글쎄, 그것은 게임의 전체 코드의 일부일뿐입니다. 내가 알고 싶었던 유일한 방법은 여기에서 검사가 어떻게 작동하는지이었습니다. 그리고, 나는 확실히 나의 대답을 얻었다. – nerd0711

+0

당신은 환영합니다. 만족스러운 질문에 대답했다면 받아 들일 수 있습니까? – spirulence

+0

물론 고마워요! – nerd0711