2017-04-07 8 views
1

Der folgende Code wird festgelegt, wenn der Avatar auf den Bildschirm geblendet wird und die Leertaste oder Aufwärts-Taste angetippt wird, bewegt er sich einmal, aber wenn er gedrückt wird, wird er nicht ständig nach oben bewegt (in der Luft). Ich muss meinen Code ändern, wenn die Taste gedrückt gehalten wird, ist die Bewegung konstant.Wie kann ich zu einer konstanten Bewegung wechseln, wenn ich eine Taste in Pygame drücke?

import pygame, sys, time, random 
from pygame.locals import * 

class Player(Duck): 
    """The player controlled Duck""" 


    def __init__(self, x, y, width, height): 
     super(Player, self).__init__(x, y, width, height) 

     # How many pixels the Player duck should move on a given frame. 
     self.y_change = 0 
     # How many pixels the spaceship should move each frame a key is pressed. 
     self.y_dist = 50 


    def MoveKeyDown(self, key): 
     """Responds to a key-down event and moves accordingly""" 

     if (key == pygame.K_UP or key == K_SPACE): 
      self.rect.y -= self.y_dist 
    def MoveKeyUp(self, key): 
     """Responds to a key-up event and stops movement accordingly""" 

     if (key == pygame.K_UP or key == K_SPACE): 
      self.rect.y -= self.y_dist 


    def update(self): 
     """ 
     Moves the Spaceship while ensuring it stays in bounds 
     """ 
     # Moves it relative to its current location. 
     self.rect.move_ip(self.y_change, 0) 

     # If the Spaceship moves off the screen, put it back on. 
     if self.rect.y <= 0: 
      self.rect.y = 0 
     elif self.rect.y > window_width: 
      self.rect.y = window_width 

while True: # the main game loop 
    for event in pygame.event.get(): #Closes game 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == pygame.KEYUP: 
      player.MoveKeyUp(event.key) 
     elif event.type == pygame.KEYDOWN: 
      player.MoveKeyDown(event.key) 
+0

obwohl es als Off-Topic geschlossen wurde, die Antworten der Unterstützung sein sollte: http://stackoverflow.com/questions/43154793/in-pygame-why-can-i-not-move-my- Sprite-graduell-während-Schaltfläche-ist-gehalten-down/43161906 # 43161906 – The4thIceman

+0

Bitte geben Sie ein [vollständiges aber minimales Beispiel] (http://stackoverflow.com/help/mcve). Wir wollen Beispiele, die wir ohne Anpassungen ausführen können. – skrx

Antwort

0

Im MoveKeyDown Verfahren Sie den self.y_change Wert auf die gewünschte Geschwindigkeit eingestellt haben und nicht die Einstellung der self.rect.y Wert. Der Aufruf self.rect.move_ip in der update Methode wird dann das Sprite verschieben. Sie müssen die update Methode jedes Bild in Ihrer Haupt-While-Schleife aufrufen.

def __init__(self, x, y, width, height): 
    super(Player, self).__init__(x, y, width, height) 
    # How many pixels the Player duck should move on a given frame. 
    self.x_change = 0 
    self.y_change = 0 
    # How many pixels the spaceship should move each frame a key is pressed. 
    self.speed = 50 

def MoveKeyDown(self, key): 
    """Responds to a key-down event and moves accordingly.""" 
    if key in (pygame.K_UP, pygame.K_SPACE): 
     self.y_change = -self.speed 

def MoveKeyUp(self, key): 
    if key in (pygame.K_UP, pygame.K_SPACE) and self.y_change < 0: 
     self.y_change = 0 

def update(self): 
    self.rect.move_ip(self.x_change, self.y_change) 
Verwandte Themen