2017-03-19 1 views
0

버튼을 클릭하면 같은 창에서 다른 화면으로 연결되는 메뉴 화면을 만들었습니다. , 내가 어떤 루프의 종료에 break의 추가했는데, 여기에 다른 질문을보고 한 후파이 게임 - "오류 : 디스플레이 표면 종료"

screen.fill(black) 
error: display Surface quit 
>>> 

:

def main(): 
    import pygame, random, time 
    pygame.init() 

    size=[800, 600] 
    screen=pygame.display.set_mode(size) 
    pygame.display.set_caption("Game") 
    done=False 
    clock=pygame.time.Clock() 

    while done==False: 
     for event in pygame.event.get(): 
      pos = pygame.mouse.get_pos() 
      if event.type == pygame.QUIT: 
       done=True 
       break 
      if button_VIEW.collidepoint(pos): 
       if event.type == pygame.MOUSEBUTTONDOWN: 
        print("VIEW.") 
        view() 
        break 

     screen.fill(black) 
      ... 

def view(): 
    done=False 
    clock=pygame.time.Clock() 

    while done==False: 
     for event in pygame.event.get(): 
      pos = pygame.mouse.get_pos() 
      if event.type == pygame.QUIT: 
       done=True 
       break 
      ... 

가능하면 , 나는 오류를 방지하는 방법을 알고 싶습니다 그러나 여전히 오류가 발생합니다.

나는 창이 닫힌 후에 프로그램이 screen.fill(black)을 실행하려고 시도한다는 것을 이해하지만 오류를 방지하는 방법에 대해서는 더 이상의 아이디어가 없습니다.

감사합니다. 그것이 단순 해 보인다면 미안 해요.

+1

오류 및 전체 추적 (오류 메시지)이 계속 발생하는 [최소한의 완전하고 검증 가능한 예] (http://stackoverflow.com/help/mcve)를 게시하십시오. – skrx

+0

@skrx 사과. 위의 코드는 이미 원래 코드에서 상당히 줄였습니다. – BaconStereo

+0

문제는 프로그램을 실행할 수없고 실제 오류가 발생한 곳을 볼 수 없다는 것입니다. – skrx

답변

1

몇 가지 가능성 다음 view 함수

  • 단부 (예컨대 sys.exit())와 프로세스. 이상적이지 않습니다.
  • view 함수의 값을 반환하여 응용 프로그램이 종료되었음을 나타냅니다 (예 : return done). main 함수 (if done: return)의 반환 값을 확인하십시오. 보다 나은.
  • done을 만들고 main 함수에서 값을 확인하십시오. 정말이 솔루션을 좋아하지 않을 것입니다.
  • 내 즐겨 찾기 : 여러 개의 이벤트 루프를 피하십시오. 문제가 해결되므로 (예 : 예 : main 함수를 종료하고 반환 할 수 있음).
+0

도움에 감사드립니다! 그러나 나는 당신의 마지막 제안을 이해하고 있는지 잘 모르겠다. 당신은'if event.type == pygame.MOUSEBUTTONDOWN :'의 들여 쓰기 내에서'def view()'에서 프로세스를 수행해야한다는 것을 의미합니까? – BaconStereo

+0

@BaconStereo 마지막 지점이 가장 좋습니다. iminurnamez 님이 [이와 같은 상태 머신] (https://www.reddit.com/r/pygame/comments/3kghhj/simple_state_machine_example/)을 사용하실 것을 권해드립니다. 이것은 다른 장면들/상태들 사이를 전환 할 수있게하며, 현재 활성화 된 장면으로 이벤트를 전달하는'Game' (장면 관리자) 클래스에서 하나의 이벤트와 while 루프 만 필요합니다. – skrx

+0

@BaconStereo 예를 찾을 수 있습니다 [여기] (http://stackoverflow.com/a/14727074/142637) – sloth