2016-07-16 4 views
0

Dieser Code sollte es so machen, dass das schwarze Rechteck kontinuierliche Bewegung macht, während die K_LEFT oder K_RIGHT gedrückt werden, aber was passiert stattdessen ist es bewegt sich nur einmal gedrückt, und dann einmal passiert, während sich die Maus über dem Fenster bewegt, bewegt sie sich (wenn es nicht sollte, sollte sie sich nur bewegen, wenn eine Taste gedrückt wird). hier ist also der Code, hoffentlich kann Ihnen helfen:PYGAME: Kontinuierliche K_DOWN funktioniert nicht wirklich

import pygame 

pygame.init() 

red = (255,0,0) 
white = (255,255,255) 
black = (0,0,0) 

gameDisplay = pygame.display.set_mode((800,600)) 
pygame.display.set_caption('Slither') 

gameExit = False 

lead_x = 300 
lead_y = 300 
lead_x_change = 0 

clock = pygame.time.Clock() 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
       gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x_change = -10 
      if event.key == pygame.K_RIGHT: 
       lead_x_change = 10 

     lead_x += lead_x_change 

     gameDisplay.fill(white) 
     pygame.draw.rect(gameDisplay, black, [lead_x, lead_y,10,10]) 
     pygame.display.update() 

     clock.tick(30) 


pygame.quit() 
quit() 

Antwort

0

Der Grund ist, weil Sie alle Ihre Code in der Ereignisschleife eingekerbt haben, was bedeutet, dass Sie nur auf den Bildschirm und die Position des rect Aktualisierung, wenn es Ereignisse in der Ereignisschleife (z. B. Bewegen der Maus, Drücken einer Taste usw.).

Stellen Sie sicher, dass Ihre inden korrekt, wie folgt aus:

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
       gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x_change = -10 
      if event.key == pygame.K_RIGHT: 
       lead_x_change = 10 

    # All code below was indented to much. 
    lead_x += lead_x_change 

    gameDisplay.fill(white) 
    pygame.draw.rect(gameDisplay, black, [lead_x, lead_y, 10, 10]) 
    pygame.display.update() 

    clock.tick(30) 

Außerdem ist es in der Regel eine gute Praxis, konsequent zu sein, wenn Sie Ihre Variablen sind zu benennen. Vorzugsweise können gameDisplay und gameExit für mehr Kontinuität game_display und game_exit genannt werden.