2012-03-29 18 views

Antwort

2

ich nie pygame benutzt habe - aber:

  • Doppelklicks Erkennung: Bei einer Schätzung wenden Sie eine Verzögerung von 50 ms an, anstatt jeden Klick sofort zu verarbeiten. Dann sehen Sie, ob Sie in dieser Zeit ein weiteres Klickereignis erhalten. Der Benutzer wird wahrscheinlich die Verzögerung von 50 ms nicht bemerken.

  • Unterscheidung zwischen Scrollrads nach oben/unten: siehe die Kommentare zu this documentation page. Offenbar gibt es fünf Tasten definiert - links, Mitte, rechts, Scroll-Rad-und Scroll-Rad-down. Das heißt, Sie können Scrollrad-Ereignisse auf die gleiche Weise erfassen, wie Sie Linksclicks erfassen - Sie müssen nur nach SCROLL_UP oder ähnlichem suchen, anstatt nach LEFT.

    Suchen Sie in der Dokumentation nach, was genau SCROLL_UP heißt.

1

Es scheint kein natives Doppelklickereignis zu sein. Ich schätze, Sie müssten die Zeit zwischen aufeinanderfolgenden MOUSEBUTTONDOWN-Ereignissen überprüfen.

Das Mausrad generiert pygame.MOUSEBUTTONDOWN Ereignisse beim Rollen. Die Schaltfläche wird auf 4 gesetzt werden, wenn das Rad aufgerollt wird, und auf der Taste 5, wenn das Rad rollt

2

einen Timer einstellen, wenn die Maus zum ersten Mal gedrückt wird, ein Userevent auf der pygame Ereigniswarteschlange zu platzieren, und eine Variable auf 1 gesetzt einen Klick anzuzeigen. Wenn der zweite Klick erfolgt, überprüfen Sie die Variable und setzen Sie das Timer-Ereignisobjekt auf off. Überprüfen Sie, ob das Userevent in der Warteschlange erscheint, da dies bedeutet, dass der Timer abgelaufen ist. sehen diese schöne Antwort für weitere Informationen: Move an object every few seconds in Pygame

Hier ist der Code ist, ersetzen Sie den double_click() Anruf mit Ihrem eigenen Funktionsaufruf:

def run(): 

    global clock, double_click_event, timer 
    double_click_event = pygame.USEREVENT + 1 
    timer = 0 

    while True: 
     clock.tick(60) 
     check_events() 
     frame.update() 
     screen.blit(frame, (0,0)) 
     pygame.display.flip() 


def check_events(): 
    global dispatcher, double_click_event, timer 

    events = pygame.event.get() 
    for event in events: 
     if event.type == pygame.QUIT: 
      sys.exit() 

     if event.type == pygame.MOUSEBUTTONDOWN: 
      if timer == 0: 
       pygame.time.set_timer(double_click_event, 500) 
       timerset = True 
      else: 
       if timer == 1: 
        pygame.time.set_timer(double_click_event, 0) 
        double_click() 
        timerset =False 

      if timerset: 
       timer = 1 
       return 
      else: 
       timer = 0 
       return 

     elif event.type == double_click_event: 
      # timer timed out 
      pygame.time.set_timer(double_click_event, 0) 
      timer = 0 
      print "evt = dble click" 
7

Ich würde nur den Deltazeitwert verwendet, dass clock.tick kehrt ein zu erhöhen Timer. In diesem Beispiel haben Sie 0,5 Sekunden zum Doppelklick, ansonsten wird der Timer zurückgesetzt.

import sys 
import pygame as pg 


pg.init() 

screen = pg.display.set_mode((640, 480)) 
BLACK = pg.Color('black') 
FONT = pg.font.Font(None, 32) 


def game(): 
    clock = pg.time.Clock() 
    timer = 0 
    dt = 0 
    running = True 

    while running: 
     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       running = False 
      if event.type == pg.MOUSEBUTTONDOWN: 
       if event.button == 1: 
        if timer == 0: # First mouse click. 
         timer = 0.001 # Start the timer. 
        # Click again before 0.5 seconds to double click. 
        elif timer < 0.5: 
         print('double click') 
         timer = 0 

     # Increase timer after mouse was pressed the first time. 
     if timer != 0: 
      timer += dt 
      # Reset after 0.5 seconds. 
      if timer >= 0.5: 
       print('too late') 
       timer = 0 

     screen.fill(BLACK) 
     txt = FONT.render(str(round(timer, 2)), True, (180, 190, 40)) 
     screen.blit(txt, (40, 40)) 
     pg.display.flip() 
     # dt == time in seconds since last tick. 
     #/1000 to convert milliseconds to seconds. 
     dt = clock.tick(30)/1000 


if __name__ == '__main__': 
    game() 
    pg.quit() 
    sys.exit() 
Verwandte Themen