Cette question implique la mise en œuvre de la possibilité de tirer des balles lorsque la barre d'espace est enfoncée, tout en maintenant un personnage joueur à l'écran.
Le code du demandeur avait initialement un problème où le personnage du joueur disparaissait lors du tir. En effet, le tir et le mouvement du joueur étaient séparés en boucles différentes. Pour résoudre ce problème, nous devons les combiner en une seule boucle principale où les deux comportements sont mis à jour simultanément.
Un autre problème était l'impossibilité d'interrompre la boucle de tir lorsque la balle atteignait le haut de l'écran. Le code original utilisait une boucle while qui se poursuivait indéfiniment. Pour résoudre ce problème, nous devons utiliser une boucle while avec une condition qui vérifie si la balle a atteint le sommet.
Voici une version révisée du code :
<code class="python">import pygame, os # Boilerplate setup omitted for brevity class Player: def __init__(self, x, y, height, width): ... def draw(self): ... def move_left(self): ... def move_right(self): ... class Bullet: def __init__(self, x, y): ... def update(self): ... def draw(self): ... # Lists of bullets bullets = [] # Initialize player p = Player(600, 500, 50, 30) # Main game loop run = True while run: clock.tick(100) # Handle events for event in pygame.event.get(): if event.type == pygame.QUIT: run = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: bullets.append(Bullet(p.x+p.width//2, p.y)) # 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() # Update position and remove bullet if it goes off-screen if b.y < 0: bullets.remove(b) # Update frame d.fill((98, 98, 98)) for b in bullets: b.draw() p.draw() 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!