2016-05-25 15 views
0

Update: Manish Kumar gab mir die Lösung für das Problem. Ich musste event.key anstelle von event.type in einen bestimmten Teil des Codes schreiben. es überprüfen unten auf it out:Schlüssel bewegen nicht das Objekt im Spiel geschrieben in Python

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

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       x_change = -5 
      elif event.key == pygame.K_RIGHT: 
       x_change = 5 

Ich versuche, mithilfe von Pygame ein einfaches Spiel zu machen. Einfach habe ich einen Code geschrieben, um ein Auto nach links und rechts zu bewegen. Alles funktioniert gut, außer dass die Schlüssel das Auto nicht bewegen können.

hier ist der Code:

import pygame 
from pygame.locals import * 
pygame.init() 

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

GD1 = pygame.display.set_mode((800, 600)) 
pygame.display.set_caption("Racing!") 
clock = pygame.time.Clock() 

carimg = pygame.image.load("C:/Users/Abdulaziz/Downloads/my_app___car_sprite_5_by_nicolaspok-d65xysp.png") 

def car(x,y): 
    GD1.blit(carimg,(x,y)) 

x = (800 * 0.45) 
y = (600 * 0.7) 

x_change = 0 

crashed = False 

while not crashed: 

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

     if event.type == pygame.KEYDOWN: 
      if event.type == pygame.K_LEFT: 
       x_change = -5 
      elif event.type == pygame.K_RIGHT: 
       x_change = 5 


     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
       x_change = 0 

    x += x_change 

    GD1.fill(white) 
    car(x,y) 



    pygame.display.flip() 
    clock.tick(60) 
pygame.quit() 
quit() 

das Problem wahrscheinlich in diesem Code ist:

if event.type == pygame.KEYDOWN: 
      if event.type == pygame.K_LEFT: 
       x_change = -5 
      elif event.type == pygame.K_RIGHT: 
       x_change = 5 


     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
       x_change = 0 

Auch hier scheint das Auto, aber kann sich nicht bewegen.

Antwort

4

Sie haben event.key statt event.type zu verwenden.

if event.type == pygame.KEYDOWN: 
     if event.key == pygame.K_LEFT: 
      x_change = -5 
     elif event.key == pygame.K_RIGHT: 
      x_change = 5 


    if event.type == pygame.KEYUP: 
     if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
      x_change = 0 
+0

das für mich arbeitete, danke. –

1

Ich denke, das Problem liegt hier:

for event in pygame.event.get(): 
    # modifications to x_change 

x += x_change 

Wenn der Aufruf von pygame.event.get() kehrt zwei Ereignisse, ein keyDown und ein KEYUP, dann werden x_change-5 oder -5 eingestellt werden, aber dann wird es eingestellt werden auf 0 zurück

sollten Sie aktualisieren x bei jeder Iteration:

for event in pygame.event.get(): 
    # modifications to x_change 

    x += x_change