2014-01-25 1 views
0

최종 사용자가 상자를 표시하기 위해 "2"를 누르길 원합니다. 일단 실행되면 다른 기능을로드하기 위해 "e"를 누르길 원합니다. 두 개의 핸들러를 사용하면 "e"를 건너 뜁니다. 기본적으로 두 번째 if 문을 건너 뜁니다.하나의 이벤트 핸들러에 사용하는 방법? Python

if event.type == pygame.KEYDOWN and event.key == pygame.K_2: 
       highlight = pygame.image.load('Highlightmenu.png') 
       highlight = pygame.transform.scale(highlight, (270, 110)) 
       window.blit(highlight,(316, 300)) 
       pygame.display.flip() 
       title() 
       if event.type == pygame.KEYDOWN and event.key == pygame.K_e: 
        playerNames() 
        print("Loading the player names menu...") 

답변

2

if 문이 잘못 되었기 때문입니다. 첫 번째 경우에는 두 번째를 넣습니다. 따라서 이벤트가 KEYDOWN이고 키가 2이고 이벤트가 KEYDOWN이고 키가 e 인 경우에만 두 번째 if의 명령문이 실행됩니다. 키는 2와 e가 될 수 없으므로 결코 실행되지 않습니다.

당신은 이런 식으로 분할한다 : 당신이이 전에 누른 경우에만 전자 키에 응답 할 같은

if event.type == pygame.KEYDOWN: 
    if event.key == pygame.K_2: 
     highlight = pygame.image.load('Highlightmenu.png') 
     highlight = pygame.transform.scale(highlight, (270, 110)) 
     window.blit(highlight,(316, 300)) 
     pygame.display.flip() 
     title() 
    elif event.key == pygame.K_e: 
     playerNames() 
     print("Loading the player names menu...") 

것 같습니다. 이를 해결하려면 프로그램의 어느 곳에서나 상태를 유지해야합니다. 따라서 사용자가 2를 누르면 다른 상태로 바뀌어 다른 상태로 이동할 수 있습니다. 처음에는 상태를 유지할 변수를 가질 수 있습니다. 나중에 상태 머신을 살펴볼 수 있습니다. 1

이외에도 코드에 몇 가지 문제가 있습니다. 버튼을 누를 때마다 디스크에서 파일을로드하지 마십시오. 대신 사전에 시작하여 사전에로드하고 필요할 때 사용할 수 있습니다. 이벤트 루프에서 그리기 코드를 사용하지 마십시오. 블리트 및 디스플레이 플립은 이벤트 루프 외부에서 호출되어야합니다. 이벤트 루프는 blit을 정의하는 변수 만 변경해야합니다.

관련 문제