Mausereignisse unter pygame auswerten

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Zizibee
User
Beiträge: 166
Registriert: Donnerstag 12. April 2007, 08:36

Montag 14. August 2017, 09:13

Hallo zusammen,

ich möchte unter pygame einen Spielstein verschieben.

Linke Maustaste wird gedrückt: Spielstein wird angehoben
Linke Maustaste ist gedrückt: Spielstein wird mit der Maus verschoben
Linke Maustaste wird losgelassen: Spielstein wird abgesetzt

Bei meiner ersten Lösung habe ich einfach drauflos geschrieben und gespeichert, ob die Maustaste gedrückt ist oder nicht. So konnte ich vergleichen, ob sie gerade gedrückt wurde. Der Code war in etwa so:

Code: Alles auswählen

 left_click, _, _ = pygame.mouse.get_pressed()

if left_click and not old_left_click:
    pass # Spielstein anheben
elif left_click:
    pass # Spielstein verschieben
elif not left_click and old_left_click:
    pass # Spielstein ablegen

old_left_click = left_click
Dann habe ich gesehen, dass es für so etwas Events gibt und habe die Klicks damit abgefangen:

Code: Alles auswählen

LEFT_MOUSEBUTTON = 1

for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == LEFT_MOUSEBUTTON:
            pass # Spielstein anheben

    if event.type == pygame.MOUSEBUTTONUP:
        if event.button == LEFT_MOUSEBUTTON:
            pass # Spielstein ablegen
Da "Mausknopf ist gerade gedrückt" aber kein Event ist, kann man den Stein so wohl nicht verschieben. Aber wie mache das dann elegant? Muss ich jetzt aus dem ersten Beispiel den Code für das Verschieben weiter benutzen und Benutze dann event und pygame.mouse.get_pressed()? Das erscheint mir irgendwie doppelt...
Oder führe ich eine neue Variable "lifted" ein, die beim Drücken auf True und beim Loslassen auf False gesetzt wird? Also in etwa so:

Code: Alles auswählen

for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == LEFT_MOUSEBUTTON:
            lifted = True
            # Hebe Spielstein an

if lifted:
    # verschiebe Spielstein
Was wäre hier denn der pythonische Weg? Ich würde zur letzten Möglichkeit tendieren, aber bestimmt gibt es da wieder einen völlig anderen Weg...

Schon einmal vielen Dank!
BlackJack

Montag 14. August 2017, 10:32

@Zizibee: Man merkt sich das die Taste gerade gedrückt ist, also Deine `lifted`-Lösung.
Zizibee
User
Beiträge: 166
Registriert: Donnerstag 12. April 2007, 08:36

Montag 14. August 2017, 10:50

@BlackJack: Ich war auf dem richtigen Weg, wie cool :D
Danke für die Antwort!
Antworten