2012-07-14 7 views
2

파이 게임을 사용하고 있고 sys.exit()을 사용할 때 문제가 발생합니다. 코드는 다음과 같습니다.파이 게임에서 sys.exit() 문제

import pygame, sys,os 
from pygame.locals import * 

pygame.init() 

window = pygame.display.set_mode((468, 60)) 
pygame.display.set_caption('Game') 
screen = pygame.display.get_surface() 

file_name = os.path.join("data","image.bmp") 

surface = pygame.image.load(file_name) 

screen.blit(surface, (0,0)) 
pygame.display.flip() 

def input(events): 
    for event in events: 
     if event.type == QUIT: 
     sys.exit(0) 
     else: 
     print event 

while True: 
    input(pygame.event.get()) 

정말 파이 게임 튜토리얼의 코드입니다. sys.exit()에 어떤 이벤트를 사용하든 관계없이 실제로 종료하려고하면 문제가 발생합니다.

Traceback (most recent call last): 
    File "C:/Python27/Lib/site-packages/pygame/examples/test.py", line 25, in <module> 
    input(pygame.event.get()) 
    File "C:/Python27/Lib/site-packages/pygame/examples/test.py", line 20, in input 
    sys.exit(0) 
SystemExit: 0 

... 그리고 프로그램이 종료되지 않습니다. 여기서 내가 뭘 잘못하고 있니? 왜냐하면이 코드는 구식 버전의 Python 용이었습니다.

답변

2

sys.exit은 예외 (SystemExit 예외)를 발생시킵니다.

  1. 그것은 단지 다중 스레드 응용 프로그램 예외가 잡힐 수 있었다
  2. 에서 현재 스레드를 종료 :이 두 가지 특이한 효과를 가지고있다.
  3. 혼자
6
sys.exit() 

은 파이 게임에 .. 파이 게임 응용 프로그램은 먼저 주회 돌이에서 다음 파이 게임은 다음 프로그램을 종료 종료 중단하는 것입니다 종료하는 적절한 방법에 약간의 신성이다. 즉.

while running == True: 
    # catch events 
    if event_type == quit: 
     running = False # breaks out of the loop 

pygame.quit() # quits pygame 
sys.exit() 

또한 당신이 ..이

if event.type == pygame.QUIT: 

당신은 파이 게임 here에서 이벤트에 대한 자세한 내용을보실 수 있습니다해야 제대로 이벤트를 잡기되지 않습니다 날 것으로 보인다.

+0

* 또한 당신이 아니라는 것을 나에게 보인다 * : 아니, 그는 pygame.locals를 가져 오니,'event.type == QUIT'은 완전히 괜찮습니다. 그러나 주 루프를 먼저 종료해야한다는 귀하의 대답은 정확합니다. – sloth

+0

어떻게 든 그것을 놓쳤습니다 ..;) 감사합니다. – iKlsR

+0

이것은 내가 두통을 많이 저지른 파이 게임을 배울 때의 대답입니다. – neuronet

1

일부 소스에서 Python 셸을 실행하는 Tkinter의 mainloop()과 sys.exit() 명령을 따르는 Pygame.init() 사이에 충돌이 있습니다.

제안 사항은 셸에서 실행 (F5)을 사용하여 게임을로드하는 대신 문제를 해결하기 위해 명령 줄에서 게임을 실행하는 것이 었습니다.

이것의 좋은 부작용은 많은 변수 업데이트를 수행하는 내 우주 침략자 게임에서 초당 35 회 애니메이션이 제대로 실행되었지만 쉘에서 제대로 실행되지 않았고 갑자기 움직이는 것이 었습니다.

내가 다음 코드를 사용하는 경우 :

if event.type == QUIT: 
    pygame.quit() 
    sys.exit() 

게임이 올바르게 종료하지만, 게임에 영향을주지 않습니다 크게 중복 쉘에서 오류 메시지를 남긴다. 그것은 약간 추한 것입니다. 이것은 명령 행에서 발생하지 않습니다.

요약 : Tkinter의 문제를 방지하기 위해 명령 줄에서 게임을 실행 해보십시오

3

나는이 문제를 해결하고 올바른 코드는 다음과 같습니다 :

running = True 
while running == True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      running = False # Exiting the while loop 

    screen.blit(background, (0,0)) 
    pygame.display.update() 

pygame.quit() # Call the quit() method outside the while loop to end the application. 
관련 문제