2017-12-02 2 views
1

Ich habe es so gemacht, wenn ein Benutzer WASD anklickt, macht es smooth_x oder smooth_y bis 5, um ständig ihre x- oder y-Koordinaten hinzuzufügen, um Bewegung zu simulieren.Pygame: KEYDOWN und KEYUP werden zur gleichen Zeit ausgelöst, verursacht keine Nettobewegung

Allerdings habe ich ein Problem, wo, wenn der Benutzer nach unten hält einen dann auf sich D zur gleichen Zeit, verursacht es smooth_x 0 sein, so dass der Benutzer an seinem Platz bleiben.

EG Benutzer klickt D (smooth_x = 5) Benutzer klickt A (smooth_x = -5) Der Benutzer hält D und dann A und dann los von D was zu smooth_x ist = 0 führt dazu das der Benutzer aufhört sich zu bewegen was ich nicht weiß t möchten. In diesem Szenario smooth_x = sollte -5

while gameloop == True: 
num_scraps = 0 
fps.tick(60) #Sets FPS to 60 
for event in pygame.event.get(): #Checks each event 
    if event.type == pygame.QUIT: #If one of the events are quit (when the user clicks the X in the top right corner) the window closes 
     pygame.quit() 
    if event.type == pygame.KEYUP: 
     print(event) 
     #If the user stop pressing one of the arrow keys it sets all the smooth values to 0 so it stops increasing the x or y coordinate 
     if event.key == pygame.K_w: 
      smoothy = 0 
     if event.key == pygame.K_s: 
      smoothy = 0 
     if event.key == pygame.K_a: 
      smoothx = 0 
     if event.key ==pygame.K_d: 
      smoothx = 0 

    if event.type == pygame.KEYDOWN: #Checks for a keypress 
     print(event) 
     if event.key == pygame.K_w: 
      smoothy -= 5 #reduces the y by 5 so player moves up 
     if event.key == pygame.K_s: 
      smoothy += 5 #increases the y by 5 so player moves down 
     if event.key == pygame.K_a: 
      smoothx -= 5 #reduces the x by 5 so player moves left 
     if event.key == pygame.K_d: 
      smoothx += 5 #increases the x by 5 so player moves right 
+0

in KEYUP nicht '0' setzen aber Wert hinzufügen/subtrahieren wie in KEYDOWN – furas

Antwort

0

I in der Regel die Bewegung auf diese Weise handhaben: I die x- und y-Geschwindigkeit auf den gewünschten Wert gesetzt, wenn eine Taste gedrückt wurde, und die Position in der Hauptschleife aktualisieren. Um die Links-Rechts-Bewegung zu stoppen, überprüfe ich auch, wenn das Zeichen links bewegt oder nach rechts smoothx > 0, bevor ich den Wert wieder auf 0. Dann wird nicht das Zeichen zu stoppen, wenn Sie sowohl die linke und rechte Taste drücken, um die selbe Zeit.

if event.type == pygame.KEYDOWN: 
    if event.key == pygame.K_w: 
     smoothy = -5 
    elif event.key == pygame.K_s: 
     smoothy = 5 
    elif event.key == pygame.K_a: 
     smoothx = -5 
    elif event.key == pygame.K_d: 
     smoothx = 5 
elif event.type == pygame.KEYUP: 
    if event.key == pygame.K_w and smoothy < 0: 
     smoothy = 0 
    elif event.key == pygame.K_s and smoothy > 0: 
     smoothy = 0 
    elif event.key == pygame.K_a and smoothx < 0: 
     smoothx = 0 
    elif event.key ==pygame.K_d and smoothx > 0: 
     smoothx = 0 

Für die Auf- und Abbewegung es so viel spielt keine Rolle, weil es sehr schwer ist, nach oben und unten gleichzeitig zu drücken, aber natürlich, dass auch sicher sein, zu überprüfen.

+0

Beachten Sie, dass dies immer noch nicht perfekt funktioniert, wenn der Benutzer wie verrückt knöpfen oder nach links drückt und wiederholt rechts, jedoch für der üblicher Fall, dass Sie schnell links und rechts drücken, es funktioniert gut. – skrx

0

Add/subtrahieren in KEYUP wie Sie in KEYDOWN aber mit umgekehrtem Vorzeichen zu tun.

if event.type == pygame.KEYUP: 
     print(event) 
     if event.key == pygame.K_w: 
      smoothy += 5 
     if event.key == pygame.K_s: 
      smoothy -= 5 
     if event.key == pygame.K_a: 
      smoothx += 5 
     if event.key ==pygame.K_d: 
      smoothx -= 5 

    if event.type == pygame.KEYDOWN: #Checks for a keypress 
     print(event) 
     if event.key == pygame.K_w: 
      smoothy -= 5 #reduces the y by 5 so player moves up 
     if event.key == pygame.K_s: 
      smoothy += 5 #increases the y by 5 so player moves down 
     if event.key == pygame.K_a: 
      smoothx -= 5 #reduces the x by 5 so player moves left 
     if event.key == pygame.K_d: 
      smoothx += 5 #increases the x by 5 so player moves right 
Verwandte Themen