„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie verhindert man das gleichzeitige Abfeuern von Kugeln in Pygame?

Wie verhindert man das gleichzeitige Abfeuern von Kugeln in Pygame?

Veröffentlicht am 03.11.2024
Durchsuche:550

How to Prevent Simultaneous Bullet Firing in Pygame?

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.

Freigabeerklärung Dieser Artikel wird reproduziert unter: 1729463900 Wenn ein Verstoß vorliegt, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

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