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