Wie kann ich verhindern, dass mehr als eine Kugel gleichzeitig abgefeuert wird?
In Pygame wird die append()-Methode verwendet, um mehrere Kugeln zu einer Liste hinzuzufügen, wenn der Spieler 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:
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()
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ögerung.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3