PyGame: Wieso wird nur ein Fenster mit schwarzem Feld geöffnet?
Hi,
ich habe eine Frage. Und zwar hab ich vor ein paar Tagen mit PyGame begonnen, da ich mich mittlerweile mit Python relativ gut auskenne. Ich hätte bezüglich PyGame eine Frage:
Warum funktioniert dieser Code nicht?
Es wird keine Fehlemeldung ausgegeben, sondern einfach nur ein neues Fenster geöffnet, welches statt einem gelben Block, den man steuern kann, einfach nur ein schwarzes Feld, von dem man die Farbe nicht ändern kann, öffnet.
Ich benutze Visual Studio Code.
Vielen Dank.
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode([600,600])
clock = pygame.time.Clock()
x = 300
y = 300
geschw = 3
breite = 40
hoehe = 80
go = True
while go:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
gedrueckt = pygame.key.get_pressed()
if gedrueckt[pygame.K_UP]:
y -= geschw
if gedrueckt[pygame.K_RIGHT]:
x += geschw
if gedrueckt[pygame.K_DOWN]:
y += geschw
if gedrueckt[pygame.K_LEFT]:
x -= geschw
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (255, 255, 0), (x, y, breite, hoehe))
pygame.display.update()
clock.tick(60)
1 Antwort
Es sieht so aus, als ob es einige kleine Fehler in Ihrem Code gibt. Hier sind ein paar Dinge, die ich bemerkt habe:
Sie sollten
pygame.display.flip()
anstelle von
pygame.display.update()
aufrufen, um die Anzeige zu aktualisieren.
- Es gibt keine Einschränkung dafür, wie weit sich der gelbe Block auf der X-Achse bewegen kann. Sie sollten die x-Position begrenzen, damit der Block innerhalb des Fensters bleibt.
- Es gibt keine Einschränkung dafür, wie weit sich der gelbe Block auf der Y-Achse bewegen kann. Sie sollten die y-Position begrenzen, damit der Block innerhalb des Fensters bleibt.
- Der while-Schleife fehlt ein Block. Sie sollten den Code innerhalb der Schleife in eine Einrückung bringen, um anzuzeigen, dass er zum Schleifenkörper gehört.
Hier ist der korrigierte Code:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode([600,600])
clock = pygame.time.Clock()
x = 300
y = 300
geschw = 3
breite = 40
hoehe = 80
go = True
while go:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
gedrueckt = pygame.key.get_pressed()
if gedrueckt[pygame.K_UP]:
y -= geschw
if gedrueckt[pygame.K_RIGHT]:
x += geschw
if gedrueckt[pygame.K_DOWN]:
y += geschw
if gedrueckt[pygame.K_LEFT]:
x -= geschw
# Begrenzen Sie die x- und y-Position, damit der Block innerhalb des Fensters bleibt
x = max(0, min(x, 600 - breite))
y = max(0, min(y, 600 - hoehe))
screen.fill((0,0,0))
pygame.draw.rect(screen, (255,255,0), (x,y,breite,hoehe))
pygame.display.flip()
clock.tick(60)