2016-06-29 23 views
1

クリックするとボタン機能を一度実行させることができません。マウスボタンが押されるたびに、リリースされるまで関数ループが実行されます。クリックごとにループを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

[ワンクリックだけ登録するためにpygameボタンを取得する方法?](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

関連する問題