mouse.get_pressed () inkonsistent / return (0, 0, 0)
edit (gelöst): using event.button scheint den Trick getan zu haben. Wenn 0, 0, 0 zurückgegeben werden, wird die richtige Maustaste zurückgegeben (1 = links, 3 = rechts).
Ich habe versucht, nach Lösungen für dieses Problem zu suchen, aber in jeder Antwort scheint es, dass die Person nichts davon wusste oder vergessen hat, es für ein Ereignis in pg.event.get () aufzunehmen. Die Mauserkennung in pygame funktioniert nicht mehr zuverlässig und ich ' Ich bin mir nicht sicher, ob es sich um einen Hardwarefehler handelt, mein Code ist schlecht oder etwas anderes. Hier ist eine vereinfachte Version meiner Spieleschleife für die Maus:
while running:
for event in pg.event.get():
pos = pg.mouse.get_pos()
if event.type == pg.MOUSEBUTTONDOWN:
if grid_space.get_rect(x=(adj_x), y=(adj_y)).collidepoint(pos):
if pg.mouse.get_pressed()[2]:
do_thing()
elif event.button == 4:
do_thing()
elif event.button == 5:
do_thing()
else:
print(pg.mouse.get_pressed())
do_thing()
Ich habe die primäre Maustaste in die andere verschoben, da dies die einzige Möglichkeit ist, die wichtigste Aktion im Moment zuverlässiger zu machen. Durch Drucken des anderen Ergebnisses stellte ich jedoch auch fest, dass jeder vierte oder fünfte Klick (0, 0, 0) statt (1, 0, 0). Ich habe verschiedene Arten des Schreibens des Ausdrucks ausprobiert, die Struktur vereinfacht, die Pygame-Uhr erhöht und nichts funktioniert.
Ist jemand darauf gestoßen und gibt es eine Lösung?
edit: Ich habe einen weiteren Test ausgeführt, bei dem das Ergebnis get_pressed sofort in einer Variablen gespeichert wird, und es gibt immer noch 0, 0, 0 zurück. Ich bin mir also ziemlich sicher, dass sich sein Status nicht von MOUESBUTTONDOWN zu dem Zeitpunkt geändert hat, zu dem er aufgerufen wurde.
Antworten
pygame.mouse.get_pressed()Holen Sie sich den aktuellen Status der Maustasten. Der Status der Schaltflächen wurde möglicherweise geändert, seit das Mausereignis aufgetreten ist. Beachten Sie, dass die Ereignisse in einer Warteschlange gespeichert sind und Sie die gespeicherten Ereignisse später in der Anwendung von erhalten pygame.event.get(). In der Zwischenzeit wurde möglicherweise der Status der Schaltfläche aufgrund dieser Schaltfläche geändert, wodurch das MOUSEBUTTONDOWNEreignis sofort im buttonAttribut des pygame.event.EventObjekts gespeichert wird . Wenn Sie in der Ereignisschleife das Ereignis erhalten, kann der Status von event.buttonund pygame.mouse.get_pressed()möglicherweise anders sein.
Das gilt auch für pygame.mouse.get_pos(). Die Position der Maus wird im Attribut posUse event.buttonund event.posstatt pygame.mouse.get_pressed()und gespeichert pygame.mouse.get_pos():
while running:
for event in pg.event.get():
if event.type == pg.MOUSEBUTTONDOWN:
print(event.button)
if grid_space.get_rect(topleft=(adj_x, adj_y)).collidepoint(event.pos):
if event.button == 2:
do_thing()
elif event.button == 4:
do_thing()
elif event.button == 5:
do_thing()
else:
do_thing()
pygame.mouse.get_pos()und pygame.mouse.get_pressed()sind nicht für die Verwendung in der Ereignisschleife vorgesehen. Die Funktionen sollten direkt in der Anwendungsschleife verwendet werden.