2017-08-08 19 views
1

Ich benutze pygame und pyautogui, um die Maus in Python 2.7 um den Bildschirm zu bewegen. Mein Code sieht so aus:Drücken und halten für pygame

import pyautogui 
    import pygame 
    pygame.init() 
    pygame.display.set_mode() 
    loop = True 
    while loop: 

     for event in pygame.event.get(): 
       if event.type == pygame.quit: 
        pygame.quit() 
       if event.type == pygame.KEYDOWN: 
        if event.key == pygame.K_a: 
         pyautogui.moveRel(-50,0) 

Mein Code mit der Maus nach links bewegt, wenn ich drücke „a“ aber ich habe wiederholt die Taste drücken, wenn ich die Maus über den Bildschirm verschieben möchten. Gibt es eine Möglichkeit, eine Taste gedrückt halten und die Maus über den Bildschirm bewegen zu können? Ich habe mir andere Tutorials zu diesem Thema angeschaut, aber sie scheinen sehr projektspezifisch zu sein.

Antwort

2

Im Grunde, was Sie tun möchten, ist eine Variable, die angibt, ob die Taste auf Keydown gedrückt ist und aktualisieren Sie es einmal Schlüssel ist oben.

Hier habe ich Ihren Code aktualisiert, um genau das zu tun, da es einfacher zu verstehen ist.

import pyautogui 
import pygame 
loop = True 

a_key_down = False         # Added variable 
while loop: 

    for event in pygame.event.get(): 
      if event.type == pygame.quit: 
       pygame.quit() 
      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_a: 
        a_key_down = True     # Replaced keydown code with this 
      if event.type == pygame.KEYUP:   # Added keyup 
       if event.key == pygame.K_a: 
        a_key_down = False     
    if a_key_down:         # Added to check if key is down 
     pyautogui.moveRel(-50,0) 
+1

ich denke, Sie setzen wollen, dass 'wenn a_key_down' in der while-Schleife nicht innerhalb der' für Veranstaltung in pygame.event.get() '. Andernfalls wird eine Verschiebung basierend auf der Anzahl der Ereignisse ausgelöst. Zugegeben, diese Änderung würde die Bewegung immer noch von der Game-Loop-Rate abhängig machen, und ich bin sicher, dass das etwas ist, mit dem sich das OP befassen muss ... –

+0

@MarkHildreth Ja, Sie haben Recht. – Martin

Verwandte Themen