Diese Frage beinhaltet die Implementierung der Fähigkeit, Kugeln zu schießen, wenn die Space -Leiste gedrückt wird, während ein Spielercharakter auf dem Bildschirm beibehält. [
Der Code des ABSER hatte zunächst ein Problem, bei dem der Spielercharakter beim Schießen verschwand. Dies liegt daran, dass die Schießerei und die Spielerbewegung in verschiedene Schleifen unterteilt wurden. Um dies anzugehen, müssen wir sie in einer einzelnen Hauptschleife kombinieren, in der beide Verhaltensweisen gleichzeitig aktualisiert werden.
Ein weiteres Problem war die Unfähigkeit, die Aufnahmeschleife zu brechen, als die Kugel die Spitze des Bildschirms erreichte. Der ursprüngliche Code wurde eine Weile Schleife verwendet, die unendlich fortgesetzt wurde. Um dies zu beheben, müssen wir eine Weile Schleife mit einer Bedingung verwenden, die überprüft, ob die Kugel die Oberseite erreicht hat.
Hier ist eine überarbeitete Version des 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()
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3