2013-11-24 5 views
0

마우스 오른쪽 버튼을 누르면이 코드가 반복되도록하려고합니다. 코드에 문제가없는 것을 볼 수는 있지만 파이 게임 창을 클릭하면 멈 춥니 다. 오른쪽 버튼.코드가 실행될 때 파이 게임 창이 멈춤

elif event.type == MOUSEBUTTONDOWN and event.button == 3: 
    pressing = 1 
    while pressing: 
     x, y = pygame.mouse.get_pos() 
     x1, y1 = x - space_ship_rect.x, y - space_ship_rect.y 
     angle = math.atan2(y1, x1) 
     movex = speed*math.cos(angle) 
     movey = speed*math.sin(angle) 
     space_ship_rect.centerx += movex 
     space_ship_rect.centery += movey 
     print("Right Button Pressed") 
    if event.type == MOUSEBUTTONUP: 
     pressing = 0 
+0

들여 쓰기에 따라이 코드를 해석하는 방법에는 여러 가지가 있습니다. 수정하십시오. 또한 게시에는 질문과 관련이없는 섹션이 포함되어 있으므로이를 제거하십시오. – XORcist

+1

@ möter : 붙여 넣은 코드는 탭을 사용했습니다. 나는 그들을 공백으로 바꿨다. –

+0

'while pressing :'루프가 이벤트 스레드를 차단하고있는 것 같습니다. – Sinkingpoint

답변

0

내가 파이 게임에 아주 익숙하지 않은, 그래서 다음과 같은 완전히 다른 이벤트 핸들러 내 지식을 기반으로한다 : 여기에 내가 실행하기 위해 노력하고있어 내 코드입니다.

이벤트 처리기가 일반적으로 작동하는 방식은 해당 기능이 번 새 이벤트 당 번 실행됩니다. 이 처리 중에는 새 이벤트에 응답하지 않습니다. MOUSEBUTTONUP은 새로운 이벤트가 될 것이므로 별도로 처리해야합니다.

이벤트 핸들러는 MOUSEBUTTONDOWN을 처리하지 않아서 현재 코드를 설정 한 방식대로 수행 할 수 없으며 윈도우를 고정시킵니다.

이제 여기서는 버튼을 누르는 동안 MOUSEBUTTONDOWN이 던져 지거나 (또는 ​​특정 간격으로 삽입 됨) 해당 이벤트가 발생한다고 가정합니다. 그렇다면 루프 당 하나의 이벤트 당 한 번씩 코드를 실행할 수 있습니다.

그렇지 않으면 변수가 true 인 동안 코드를 반복하는 새 스레드를 시작할 수 있습니다. 그런 다음 MOUSEBUTTONUP 핸들러에서이 변수를 false로 설정할 수 있습니다.

elif event.type == MOUSEBUTTONDOWN and event.button == 3: 
    mouse_pressing = True 
    thread.start_new_thread(mouse_pressing_func,()) 
elif event.type == MOUSEBUTTONUP and event.button == 3: 
    mouse_pressing = False 

편집 :

지금 들여 쓰기의 고정 것을, 내가 볼

import thread 

mouse_pressing = True 

def mouse_pressing_func(): 
    while mouse_pressing: 
     # Do fancy stuff 

그런 다음 이벤트 핸들러에서 이것을 사용

하면 이벤트 핸들러의 외부에서 정의 또 다른 문제가 생겼습니다. 이벤트가 루프의 MOUSEBUTTONUP인지 여부는 확인하지 않습니다. 즉, 그 진술에 도달하지 못할 것입니다.

+0

당신이 나에게 말하려고하는 것을 정확히 이해하지 못하고 있습니다. – user2993584

+0

@ user2993584 : jazzpi는 루프가 전혀 없어야한다고 말합니다. –

+0

@ user2993584 : "루프 당 하나의 이벤트 당 한 번 코드를 실행하십시오." – jazzpi

0

은 어쩌면 붙여 넣은 코드에서 단지 결함,하지만 나에게, 당신의 while -loop에 코드 istn't의 끝에서 if -statement처럼 보이는 당신은 당신의 창을 일으키는 무한 루프를 얻을 수 있도록 얼어 버려. Greets, TheWormKill