2013-08-28 5 views
0

키를 눌렀을 때 BOOL을 토글하지 않으려 고하기 때문에 각 프레임마다 토글하고 끕니다 키를 누르고 있으면됩니다.파이 게임 - 눌렀을 때가 아니라 키를 눌렀을 때 BOOL을 토글하려고합니다.

여기에 내 작은 토글 코드

if key[pygame.K_z] and robsHouse.pressed == False: 
     robsHouse.pressed = True 
    elif key[pygame.K_z] and robsHouse.pressed == True: 
     robsHouse.pressed = False 

어떤 아이디어가 도움이 될 것입니다, 감사합니다.

+0

은 실제로 if 문에 중첩 된 elif입니까, 아니면 코드를 복사 할 때 오류가 있습니까? elif가 if의 내부에 있으면 문제가 발생할 수 있기 때문입니다. – Chachmu

답변

0

KEYDOWNKEYUP 이벤트를 토글해야합니다.

+0

그는 'KEYDOWN'과 'KEYUP'을 토글하지 않아도됩니다. 이것이 그 일을하는 유일한 길입니다. 'pygame.key' 모듈은 불리언 값의 배열을 검색 할 수 있습니다 (각 가능한 키에 대해 1). 프레임간에 발생하는 매우 빠른 키 누락을 놓치기 때문에이 방법은 일반적으로 권장되지 않지만 일부 응용 프로그램에서는 이벤트 발생에 대한 지식이 필요하지 않을 수 있습니다. – Haz

0

그래서이 부울은 버튼을 누를 때 변경됩니다. 맞습니까? 는 그냥 KEYUP 이벤트를 사용하고 변수 역 다음 key[pygame.K_z] 조건이 각 루프 반복에 만족하실 것입니다 때문에

if event == KEYUP: 
    if event.key == DESIRED_KEY: 
     boolVar = not boolVar 
0

는 당신이 키를 누르고있는 동안 코드가 robsHouse.pressed 모든 프레임을 전환 된 이유는 키가 유지되는 상태를 아래로 내려 가고 두 번째 조건은 교대 프레임에서 서로를 만족하게합니다.

당신은 키 데이터를 검색하는 방법을 변경하지 않고, 당신이 뭔가를 할 수 있습니다 :

if key[pygame.K_z]: 
    robsHouse.pressed = True 
else: 
    robsHouse.pressed = False 

또 다른 방법은 오히려 키에서 키 데이터를 가져 오는 것보다 파이 게임의 이벤트 모듈에서 KEYUPKEYDOWN 이벤트를 찾을 수 있습니다 기준 치수. 즉 다음과 같이 할 수있다 :

for event in pygame.event.get(): 
    if event.type == pygame.KEYDOWN: 
     if event.key == pygame.K_z: 
      robsHouse.pressed = True 
    elif event.type == pygame.KEYUP: 
     if event.key == pygame.K_z: 
      robsHouse.pressed = False 

는 개인적으로, 나는 대부분의 경우 두 번째 방법을 선호합니다. 어쨌든 파이 게임의 이벤트 모듈에서 이벤트를 처리해야 할 것입니다. 그렇지 않으면 큐가 가득 차고 프로그램이 응답하지 않게됩니다 (파이 게임 이벤트 모듈 문서 참조).

관련 문제