2016-06-29 3 views
1

클릭하면 버튼 기능을 한 번 실행할 수 없습니다. 마우스 버튼이 눌려지면 해제 될 때까지 함수 루프를 따라 실행됩니다. 클릭당 한 번 루프를 돌리고 싶습니다. 당신이 빨리가 반복적으로 루프를 통해 실행 당신이 할 수있는 클릭하면버튼 기능을 한 번 실행하십시오.

def Button(msg, x, y, w, h, ic, ac, action=None): 
    mouse = pygame.mouse.get_pos() 
    click = pygame.mouse.get_pressed() 
    if x+w > mouse[0] > x and y+h > mouse[1] > y: 
     pygame.draw.rect(window, ac, (x, y, w, h)) 
     #if event.type == pygame.MOUSEBUTTONDOWN: 
     if click[0] == 1 and action != None: 
      pygame.draw.rect(window, lightgrey, (x, y, w, h)) 
      if action == "undo": 
       print("hey") 
      if action == "reset": 
       for row in range(6): 
        for column in range(7): 
         board[row][column] = 0   
      elif action == "quit": 
       pygame.quit() 
       quit() 


    else: 
     pygame.draw.rect(window, ic, (x, y, w, h)) 

인쇄 ("안녕하세요") 인쇄 약 3 회 : 여기에 코드입니다.

+0

가능한 한 [클릭 한 번만 등록하는 파이 게임 버튼을 얻을 수 있습니까?] (http://stackoverflow.com/questions/31300690/how-to-get-pygame-button-to-register -only-one-click) – numbermaniac

답변

0

pygame.mouse.get_pressed()은 마우스를 누르고있는 동안 True를 반환합니다. 이것은 모든 프레임을 검사한다고 가정하면 여러 프레임에 대해 1 또는 True를 반환하므로 print 문이 여러 번 발생합니다.

if event.type == pygame.MOUSEBUTTONDOWN:

당신이 주석이 줄은 사용되어야하는 것입니다. 마우스가 실제로 클릭 될 때만 활성화되지만 은 활성화되지 않고이 눌러지지 않습니다. 이 작업을하려면이 줄 앞에 for event in pygame.event.get()과 같은 루프가 있어야합니다.

기본적으로해야 할 일은 click = pygame.mouse.get_pressed()을 제거하고 주석 처리 한 행으로 if click[0] == 1을 바꾸는 것입니다. 바라건대이 작품 :)

+0

당신이 말한 것을 추가했고, 부분적으로 작동합니다. 클릭 할 때 한 번 인쇄되지만 버튼을 다시 클릭하면 루프를 전혀 통과하지 못합니다. 한번 클릭하면 '헤이'가 인쇄되지만, 다시 클릭하면 아무것도 인쇄되지 않습니다. –

+0

그건 특이합니다. 내가 말했듯이 for 루프를 넣었 니? 네가 그랬다면, 어디에서 그걸 넣었 니? – numbermaniac

관련 문제