Comment puis-je empêcher plusieurs balles de tirer en même temps ?
Dans Pygame, en utilisant la méthode append() pour ajouter plusieurs balles à une liste lorsque le joueur tire, toutes les balles tirent simultanément. Pour éviter cela, implémentez un minuteur qui espace les tirs de balles.
Voici une version modifiée de votre code qui intègre un minuteur :
<code class="python">import pygame pygame.init() # Game settings screenWidth = 800 screenHeight = 600 clock = pygame.time.Clock() # Bullet settings bullet_delay = 500 # Time in milliseconds between shots next_bullet = 0 # Time of next bullet # Player settings player1 = pygame.sprite.Sprite() player1.image = pygame.Surface((50, 50)) player1.image.fill((255, 0, 0)) player1.rect = player1.image.get_rect() player1.rect.center = (screenWidth / 2, screenHeight / 2) # Group to hold all bullets bullets = pygame.sprite.Group() # Game loop run = True while run: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: # Check if enough time has passed since last shot current_time = pygame.time.get_ticks() if current_time >= next_bullet: # Create a new bullet bullet = pygame.sprite.Sprite() bullet.image = pygame.Surface((10, 10)) bullet.image.fill((0, 0, 0)) bullet.rect = bullet.image.get_rect() bullet.rect.center = player1.rect.center # Add bullet to group bullets.add(bullet) # Reset next bullet time next_bullet = current_time + bullet_delay # Update game objects player1.update() bullets.update() # Handle bullet movement for bullet in bullets: bullet.rect.y -= 5 # Change to desired bullet speed # Remove any bullets that have moved off the screen if bullet.rect.bottom <= 0: bullets.remove(bullet) # Draw objects on the screen screen.fill((0, 0, 0)) screen.blit(player1.image, player1.rect) bullets.draw(screen) # Update the display pygame.display.update() pygame.quit()</code>
Dans ce code modifié, bullet_delay détermine le délai entre les tirs et next_bullet suit l'heure du prochain tir autorisé. Lorsque le joueur appuie sur espace, nous vérifions si suffisamment de temps s'est écoulé depuis le dernier tir (en fonction de next_bullet). Si tel est le cas, une puce est créée et ajoutée au groupe de puces. Cette minuterie garantit qu'une seule balle peut être tirée à la fois, avec le délai spécifié par bullet_delay.
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!