"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 rendre un joueur tirer des balles dans un jeu tout en gardant le joueur visible?

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

Publié le 2025-02-22
Parcourir:777

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

Tirer des balles avec la barre d'espace

Cette question consiste à implémenter la possibilité de tirer des balles lorsque la barre d'espace est enfoncée, tout en maintenant un caractère de joueur à l'écran.

Problème et solution

Le code du demandeur avait initialement un problème où le personnage du joueur a disparu lors de la prise de vue. En effet, le tir et le mouvement des joueurs ont été séparés en différentes boucles. Pour y remédier, nous devons les combiner en une seule boucle principale où les deux comportements sont mis à jour simultanément.

Un autre problème était l'incapacité de briser la boucle de prise de vue lorsque la balle a atteint le haut de l'écran. Le code d'origine a utilisé une boucle de temps qui s'est poursuivie infiniment. Pour résoudre ce problème, nous devons utiliser une boucle de temps avec une condition qui vérifie si la balle a atteint le haut.

explication du code

Voici une version révisée du code:

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

Modifications de clé:

  • La logique de mouvement et de mouvement du joueur sont maintenant combinées en une seule boucle de jeu principale.
  • La fonction de mise à jour des balles maintenant vérifie si la balle est sortie hors écran et la supprime en conséquence.
  • La boucle principale met à jour et dessine le lecteur et dessine le lecteur et dessine le lecteur Bullets, s'assurant qu'ils sont tous les deux présents sur l'écran.
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