Comment réparer la disparition d'un joueur et implémenter le tir par balle avec la barre d'espace dans Pygame ?

Linda Hamilton
Libérer: 2024-11-04 07:22:30
original
390 Les gens l'ont consulté

How to Fix Player Disappearance and Implement Bullet Shooting with Space Bar in Pygame?

Comment puis-je tirer une balle avec la barre d'espace ?

Dans votre code, la disparition du joueur lorsqu'on appuie sur la barre d'espace est probablement en raison des boucles séparées pour le tir et le mouvement du joueur. Pour résoudre ce problème, intégrez les deux actions dans la boucle principale de l'application.

Pour le tir de balles, utilisez une liste (par exemple, bullet_list) pour stocker les positions des balles. Lors du tir, ajoutez la position de départ de l'objet tirant la balle à la liste. Parcourez la liste des puces, en mettant à jour la position de chaque puce et en supprimant celles qui quittent l'écran.

La boucle while de la méthode de tir dans votre classe de puces ne se rompt pas malgré la condition si y <= 0. C'est car la condition n’est jamais remplie puisque y est croissant plutôt que décroissant. Pour résoudre ce problème, remplacez y -= self.speed par y = self.speed.

De plus, implémentez la gestion des événements dans la boucle de votre application principale pour capturer les pressions sur les touches. Utilisez pygame.key.get_pressed() pour obtenir en continu l'état des clés. En fonction de la pression sur la touche, mettez à jour la position du joueur et déclenchez le tir de balle.

Voici un extrait de code révisé qui intègre ces correctifs :

<code class="python">bullets = []

while True:

    # Event handling
    for event in pygame.event.get():
        pass

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SPACE:
            bullets.append(Bullet(p.x+p.width//2, p.y))
        if event.key == pygame.K_LEFT:
            p.move_left()
        if event.key == pygame.K_RIGHT:
            p.move_right()

    # Update objects
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        p.move_left()
    if keys[pygame.K_RIGHT]:
        p.move_right()
    for b in bullets:
        b.update()
        if b.y <= 0:
            bullets.remove(b)

    # Clear display
    d.fill((98, 98, 98))

    # Draw scene
    for b in bullets:
        b.draw()
    p.draw()

    # Update display
    win.update()</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!