Wie kann ich verhindern, dass mehr als eine Kugel gleichzeitig abgefeuert wird?
In Pygame wird die append()-Methode verwendet, um beim Spieler mehrere Kugeln zu einer Liste hinzuzufügen Schüsse führen dazu, dass alle Kugeln gleichzeitig abgefeuert werden. Um dies zu verhindern, implementieren Sie einen Timer, der das Abfeuern von Kugeln zeitlich begrenzt.
Hier ist eine modifizierte Version Ihres Codes, die einen Timer enthält:
<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>
In diesem modifizierten Code bestimmt Bullet_delay die Verzögerung zwischen Schüssen und next_bullet verfolgt die Zeit des nächsten erlaubten Schusses. Wenn der Spieler die Leertaste drückt, prüfen wir, ob seit dem letzten Schuss genügend Zeit vergangen ist (basierend auf next_bullet). Wenn dies der Fall ist, wird ein Aufzählungszeichen erstellt und der Aufzählungszeichengruppe hinzugefügt. Dieser Timer stellt sicher, dass jeweils nur eine Kugel abgefeuert werden kann, mit der durch „bullet_delay.
“ angegebenen VerzögerungDas obige ist der detaillierte Inhalt vonWie verhindert man das gleichzeitige Abfeuern von Kugeln in Pygame?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!