2016-05-03 22 views
1

Ich versuche ein Spiel mit der Mausposition zu implementieren, um festzustellen, ob der Benutzer auf eine Schaltfläche klickt. Irgendwie wird die Mausposition für ein paar Sekunden nicht aktualisiert und wechselt für einige Sekunden zu einer neuen Position und wiederholt sich. Ich bewegte und drückte die Maus an anderer Stelle auf dem Bildschirm, aber die Mausposition änderte sich überhaupt nicht. (Arbeiten an Python 3.5.1 und Pygame 1.9.2, mit IDE PyCharm) Irgendeine Idee? Hier ist mein Code:Python Pygame Mausposition wird nicht aktualisiert

done = False 
while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
    mouse = pygame.mouse.get_pos() 
    click = pygame.mouse.get_pressed() 
    if click[0]==1: 
     print(mouse) 
    pygame.display.update() 
+0

klicken Sie innerhalb eines Pygame-Fensters? –

Antwort

-1

Ihre

mouse = pygame.mouse.get_pos() 
click = pygame.mouse.get_pressed() 

nur die Staaten zum Zeitpunkt des Anruf erhalten. http://www.pygame.org/docs/ref/mouse.html Gemäß der Dokumentation:

alle der Mausereignisse, um es besser zu bedienen entweder pygame.event.wait() oder pygame.event.get() und überprüfen Sie alle diese Ereignisse

Das sind die Klicks, die Sie verpassen, weil Ihr Programm sie nicht zur Verarbeitung speichert. Sie sehen es nur, wenn Sie Glück haben und das Programm ruft die Funktion auf, wenn die Taste nicht gedrückt ist.

+1

Ich habe meinen Code geändert: für das Ereignis in pygame.event.get(): if event.type == pygame.MOUSEBUTTONDOWN: pos = pygame.mouse.get_pos() .. Ich habe immer noch das gleiche Problem. – lanlan2271

0

Es gibt zwei Möglichkeiten der Handhabung von Eingabeereignissen in pygame:

  • Staat prüfen
  • Event-Handling

Zum besseren Verständnis, wie es funktioniert: http://www.pygame.org/docs/tut/newbieguide.html#managing-the-event-subsystem

Sie verwenden beides in Ihrem Code, Zustandsprüfung:

mouse = pygame.mouse.get_pos() 
click = pygame.mouse.get_pressed() 

Ereignisbehandlung:

for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 

Wenn Sie immer noch die Mausposition erhalten Überprüfung verwenden Zustand möchten Sie hinzufügen können:

clock=pygame.time.Clock() 
clock.tick(60) # 60 frames per second 

So ist die Aktualisierung der Position sollte besser sein.

+0

Danke! Ich habe die Uhr hinzugefügt, aber die Mausposition änderte sich immer noch extrem langsam. Was könnte sonst noch falsch sein? – lanlan2271

0

Wenn die Taste hat eine rect, dann können Sie den rect.collidepoint() -Methode mit Veranstaltung wie diese Überprüfung verwenden:

mouse_pos = pygame.mouse.get_pos() 

    if event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0] and button.rect.collidepoint(mouse_pos): 
-1

Dies zeigt ein grundlegendes pygame Maus-Programm zu bekommen. Klicken Sie einfach in das Fenster und die Maus Koordinate gedruckt:

import pygame as py 

py.init() 

white = (255,255,255) 

window = (400,400) 
screen = py.display.set_mode(window) 

clock = py.time.Clock() 

done = False 
while not done: 
    for event in py.event.get(): 
     if event.type == py.QUIT: 
      done = True 
     elif event.type == py.MOUSEBUTTONDOWN: 
      print py.mouse.get_pos() 
    screen.fill(white) 
    py.display.flip() 
    clock.tick(30) 

py.quit() 

Hoffnung diese :)

+1

Haben Sie eine Idee, warum dieser genaue Code nicht richtig mit PyGame 1.9.2a0 auf Python 3.5.2 über Anaconda auf OS X El Capitan funktioniert? Es 'funktioniert', aktualisiert aber nur die Mausposition, wenn ich wiederholt auf UND rase die Maus herum. Sonst meldet es immer die gleiche Position, egal wo ich klicke. Sehen Sie hier für ein gif des Verhaltens: [link] (https://dl.dropboxusercontent.com/u/1049625/OddBehaviorPygameMouse.gif) – TSeymour

1

Der Aufruf

mouse = pygame.mouse.get_pos() 

nicht aktualisiert die Position, es sei denn das Ereignis MouseMotion ausgeführt hilft .Wenn Sie das Programm in einem Fenster auf einem MAC ausführen, muss die Maus gedrückt, gehalten und bewegt werden (wenn Sie drücken, halten und dann die Maus bewegen, würde pygame.mouse.get_pos() die aktuelle Mausposition zurückgeben).

+0

Wirklich? Warum sagt nichts über dieses Verhalten in den Dokumenten? https://www.pygame.org/docs/ref/mouse.html#pygame.mouse.get_pos Ich kann bestätigen, dass es funktioniert, wie Sie beschreiben. Ist dieses Verhalten auf einem Windows-Computer anders? – allcaps