"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment empêcher les tirs simultanés de balles dans Pygame ?

Comment empêcher les tirs simultanés de balles dans Pygame ?

Publié le 2024-11-03
Parcourir:808

How to Prevent Simultaneous Bullet Firing in Pygame?

Comment puis-je empêcher plusieurs balles de tirer à la fois ?

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 :

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()

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. Ce minuteur garantit qu'une seule balle peut être tirée à la fois, avec le délai spécifié par bullet_delay.

Déclaration de sortie Cet article est reproduit sur: 1729463900 S'il y a une contrefaçon, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3