Maison > Article > développement back-end > Comment réparer la disparition d'un joueur et implémenter le tir par balle avec la barre d'espace dans Pygame ?
Comment puis-je tirer une balle avec la barre d'espace ?
Dans votre code, la disparition du joueur lorsqu'on appuie sur la barre d'espace est probablement en raison des boucles séparées pour le tir et le mouvement du joueur. Pour résoudre ce problème, intégrez les deux actions dans la boucle principale de l'application.
Pour le tir de balles, utilisez une liste (par exemple, bullet_list) pour stocker les positions des balles. Lors du tir, ajoutez la position de départ de l'objet tirant la balle à la liste. Parcourez la liste des puces, en mettant à jour la position de chaque puce et en supprimant celles qui quittent l'écran.
La boucle while de la méthode de tir dans votre classe de puces ne se rompt pas malgré la condition si y <= 0. C'est car la condition n’est jamais remplie puisque y est croissant plutôt que décroissant. Pour résoudre ce problème, remplacez y -= self.speed par y = self.speed.
De plus, implémentez la gestion des événements dans la boucle de votre application principale pour capturer les pressions sur les touches. Utilisez pygame.key.get_pressed() pour obtenir en continu l'état des clés. En fonction de la pression sur la touche, mettez à jour la position du joueur et déclenchez le tir de balle.
Voici un extrait de code révisé qui intègre ces correctifs :
<code class="python">bullets = [] while True: # Event handling for event in pygame.event.get(): pass if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: bullets.append(Bullet(p.x+p.width//2, p.y)) if event.key == pygame.K_LEFT: p.move_left() if event.key == pygame.K_RIGHT: p.move_right() # Update objects keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: p.move_left() if keys[pygame.K_RIGHT]: p.move_right() for b in bullets: b.update() if b.y <= 0: bullets.remove(b) # Clear display d.fill((98, 98, 98)) # Draw scene for b in bullets: b.draw() p.draw() # Update display win.update()</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!