Python: Wieso wird bei diesem Skript keine Rückmeldung angezeigt?

1 Antwort

Ich habe dieses Skript auf einem Linuxrechner ausprobiert und merke an:

Erste Beobachtung:

Die Verarbeitung der Eingabeereignisse geschieht viel zu rasch. Deshalb verschwindet der der Player nach der Betätigung einer der Tasten K_LEFT, K_RIGHT praktisch sofort, was den Eindruck einer Fehlfunktion verursacht.

Es schein mir erforderlich, in die Eingabeverarbeitungsschleife eine Zeitverzögerung einzubauen. Die Zeitverzögerung wird mit der Funktion pygame.time.wait programmiert. Die sollte 30 bis 50 Millisekunden betragen und zweckmäßigerweise nach der Aktualisierung der Grafik ausgeführt werden.

Schreibe also bitte statt des Befehls

  pygame.display.flip()

die Befehle

   pygame.display.flip()
   pygame.time.wait(30)

Beide Befehle haben die gleiche Einrückung.

Eine Eingabeverzögerung wirst du bei der Verarbeitung der Benutzereingabe praktisch immer brauchen. Die Eingabeverzögerung gehört ind die Event-Loop (Eingabeverarbeitungsschleife)

Zweite Beobachtung:

In Zeile 41 steht:

gravity = 0.5

Diese Anweisung verursacht in Python 3.8.10 die folgende Warnung:

Warning (from warnings module):
 File "/home/boris/Research/Pygame/GF-2023-05-17/game.py", line 110
   pygame.draw.rect(window, black, (player_x, player_y, player_width, player_height))
DeprecationWarning: an integer is required (got type float). Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.

Das heißt, dass beim Aufruf der Funktion pygame.draw.rect in den Koordinaten des Rechtecks Gleitkommazahlen verwendet werden, was eigentlich nicht sein soll. Dieses Problem lässt sich lösen, indem für gravity ein ganzzahliger Wert angegeben wird.

gravity = 1

scheint mir passend. Der Zahlenwert 1 ist natürlcih ohne Dezimalpunkt zu schreiben.

Woher ich das weiß:Berufserfahrung – Berufstätigkeit als Software-Entwickler