Le déplacement d'un objet à gauche et à droite
J'ai un problème avec Python et pygame: je n'ai aucune idée de comment faire une simple pagaie se déplacer à gauche et à droite. Fondamentalement, je suis en train de travailler sur un pong type du jeu pour mon premier projet.
Après la lecture de quelques articles en ligne, j'ai pensé à la façon de comment faire cela. Le code que j'ai pour l'instant est:
PADDLE_WIDTH = 50
PADDLE_HEIGHT = 10
paddleSpeedX = 0
p1Paddle = pygame.Rect(10, 430, PADDLE_WIDTH, PADDLE_HEIGHT)
PADDLE_COLOR = pygame.color.Color("red")
while True:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_LEFT:
p1Paddle.right = p1Paddle.left + paddleSpeedX - 10
if event.key == K_RIGHT:
p1Paddle.left = p1Paddle.left + paddleSpeedX + 10
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
pygame.display.update()
Après avoir entré ce code, le jeu fonctionne mais je ne peux toujours pas déplacer la raquette de gauche et de droite.
Comment puis-je faire cela?
- Votre
if event.type == QUIT
partie semble être aligné mal. Ne devrait-elle pas être au même niveau queif event.type == KEYDOWN
? - J'ai posté un travail plein de code qui permet de résoudre votre question. Voir ma réponse.
- Pour pygame vous pouvez obtenir de l'entrée dans les deux méthodes de [1] les événements clés, ou [2] clé d'interrogation - Vous êtes à l'aide de la première (cas) de la méthode. Pour cela, vous voulez la 2ème méthode. Voir stackoverflow.com/a/11365418/341744 pour le code. -- Si c'était un FPS, vous voulez interrogation WASD pour le mouvement, et les événements mousedown.
Vous devez vous connecter pour publier un commentaire.
Pygame soulève un
KEYDOWN
événement une seule fois, lorsque vous appuyez sur une touche.Malheureusement, il ne pourra pas continuer à élever un
KEYDOWN
de l'événement, ce qui se passe, c'est que votre pagaie est des secousses plus qu'une seule fois, et de ne pas se déplacer à nouveau, sauf si vous gardez à spammer la touche gauche ou droite.Au lieu de cela, ce que vous pourriez faire est de définir une vitesse quand vous recevez un
KEYDOWN
événement, et remis à zéro lorsque vous obtenezKEYUP
, comme suit:(J'ai aussi modifié certaines de vos noms de variable, puisque je ne pouvais pas comprendre ce qui
p1Paddle.left
etp1Paddle.right
étaient -- j'espère que vous n'avez pas l'esprit).J'ai fait quelques ajouts et modifications pour rendre votre code de travail.
Dans chaque image (itération de la boucle de), vous devez effacer l'écran et de les redessiner la pagaie. C'est pour s'assurer que la palette est redessiné avec de nouvelles coordonnées lorsque les flèches GAUCHE/DROITE sont pressés.
Remarquez que j'ai changer p1Paddle.gauche, au lieu de p1Paddle.droite quand la GAUCHE est pressé.
Une solution plus élégante serait l'un au-dessous de
Avis que je vérifie la pression sur la touche à l'aide de
pygame.key.get_pressed()
. Il permet de faire un mouvement lisse que nous vérifions l'état de la clé et ne pas attendre qu'un événement se produise.J'ai ajouté une horloge objet de limiter le taux de trame de 50 FPS (images par seconde).
Veuillez essayer les deux approches.