2D Spiel Coden, Problem?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du verwendest eine Kollisionsbox für deine Berechnungen und basierend auf der setzt du dann den Dinosaurier.

Die Kollisionsbox versetzt du abhängig von der Bewegungsrichtung.
Das kann zu einer Positionsändreung führen.

Zudem kann die Berechnung der Bildposition zu einer Verschiebung um ein Pixel führen, wenn das Bild keine Gerade Anzal von Pixel in x-Dimension hat.

mein chatgpt sagt: Mögliche Ursachen für die ungewollte Verschiebung
  1. Falsche Berechnung der Zeichenposition
  • Der Charakter wird nicht an seiner echten Position, sondern relativ zur Kollisionsbox gezeichnet:
python
KopierenBearbeiten
charakter_x = kollisionsbox.centerx - (aktuelles_bild.get_width() // 2)
  • Falls
  • kollisionsbox.centerx
  • sich nicht genau mit
  • spieler_rect.x
  • deckt (z. B. wegen
  • KOLLISION_OFFSET_X
  • ), könnte das eine Verschiebung verursachen.
  • Lösung: Testweise den
  • KOLLISION_OFFSET_X
  • auf
  • 0
  • setzen oder
  • charakter_x
  • direkt aus
  • spieler_rect
  • berechnen.
  1. Flipping des Charakters (links/rechts) erzeugt Asymmetrien
  • Wenn
  • pygame.transform.flip()
  • aufgerufen wird, kann es zu Rundungsfehlern in der Breite des Bildes kommen, die dann leichte Verschiebungen verursachen.
  • Lösung: Prüfen, ob das Problem nur auftritt, wenn sich die Richtung ändert.
  1. Problem mit der Bewegungsgeschwindigkeit
  • Die
  • spieler_rect.x
  • -Koordinaten werden je nach gedrückter Taste um verschiedene Werte geändert (
  • geschwindigkeit
  • ,
  • laufgeschwindigkeit
  • ,
  • luftgeschwindigkeit
  • ). Falls eine dieser Variablen nicht konsistent ist (z. B. durch Rundungsfehler), könnte es zu kleinen Abweichungen kommen.
  • Lösung: Überprüfen, ob
  • spieler_rect.x
  • sich in exakten Pixelwerten bewegt, z. B. mit
  • print(spieler_rect.x)
  • , und ob das Muster gleichmäßig ist.

die frage ist, ob es nicht schlauer wäre, erstmal was kleineres zu coden, bzw die mechaniken isoliert zu lernen. weil wenn alles aufeinmal läuft, ist es sehr schwer fehler zu spotten wenn man unerfahren ist