Maison >développement back-end >Tutoriel Python >Comment obliger un joueur à tirer des balles dans un jeu tout en gardant le joueur visible ?

Comment obliger un joueur à tirer des balles dans un jeu tout en gardant le joueur visible ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 11:46:02622parcourir

How to Make a Player Shoot Bullets in a Game While Keeping the Player Visible?

Tir des balles avec la barre d'espace

Cette question implique la mise en œuvre de la possibilité de tirer des balles lorsque la barre d'espace est enfoncée, tout en maintenant un personnage joueur à l'écran.

Problème et solution

Le code du demandeur avait initialement un problème où le personnage du joueur disparaissait lors du tir. En effet, le tir et le mouvement du joueur étaient séparés en boucles différentes. Pour résoudre ce problème, nous devons les combiner en une seule boucle principale où les deux comportements sont mis à jour simultanément.

Un autre problème était l'impossibilité d'interrompre la boucle de tir lorsque la balle atteignait le haut de l'écran. Le code original utilisait une boucle while qui se poursuivait indéfiniment. Pour résoudre ce problème, nous devons utiliser une boucle while avec une condition qui vérifie si la balle a atteint le sommet.

Explication du code

Voici une version révisée du code :

<code class="python">import pygame, os

# Boilerplate setup omitted for brevity

class Player:
    def __init__(self, x, y, height, width):
        ...

    def draw(self):
        ...

    def move_left(self):
        ...

    def move_right(self):
        ...


class Bullet:
    def __init__(self, x, y):
        ...

    def update(self):
        ...

    def draw(self):
        ...


# Lists of bullets
bullets = []

# Initialize player
p = Player(600, 500, 50, 30)

# Main game loop
run = True
while run:
    clock.tick(100)
    
    # Handle events
    for event in pygame.event.get():
        if event.type ==  pygame.QUIT:
            run = False
        if event.type ==  pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullets.append(Bullet(p.x+p.width//2, p.y))

    # 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()
        # Update position and remove bullet if it goes off-screen
        if b.y < 0:
            bullets.remove(b)

    # Update frame
    d.fill((98, 98, 98))
    for b in bullets:
        b.draw()
    p.draw()
    win.update()</code>

Changements clés :

  • La logique de tir et de mouvement du joueur est désormais combinée en une seule boucle de jeu principale.
  • La fonction de mise à jour de la balle vérifie désormais si la balle est partie hors écran et le supprime en conséquence.
  • La boucle principale met à jour et dessine en permanence le joueur et les balles, garantissant qu'ils sont tous deux présents à l'écran.

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!

Déclaration:
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