2D Spiel Coden, Problem?
Hallo Leute, gestern Nacht hatte ich die lustige und spontane Idee mein eigenes erstes ganz simples 2D Jump and Run Spiel zu coden. Ich habe davor weder ein Spiel programmiert, noch habe ich Ahnung davon. Also habe ich mich zusammen mit Chat GPT (und mittlerweile 2 anderen KI Bots) an die Arbeit gemacht und es kam tatsächlich eine Süße kleine Szene dabei raus.
Jedoch habe ich ein Problem bevor ich das Speil erweitern kann und mehr hinzufügen kann; wenn mein Charakter nach rechts gedreht ist und man sich dann nach links dreht, versetzt mein Charakter sich leicht in der Position. So als wenn das PNG Bild was ich nutze nicht mittig sei und sich versetzt spiegelt, dem ist aber nicht so. Das Bild bzw der Charakter im benutzten Bild steht mittig und eigentlich sollten sich die Füße vom Charakter nicht so versetzen wenn das Bild/der Spieler gedreht wird.
Ich bitte euch daher, mir versuchen zu helfen. Ich gebe gerne alle Infos die man braucht um zu helfen, fragt unter diesem Post einfach nach und ich versuche so gut wie möglich Infos zu geben.
Hier der Code, der zuletzt am besten funktioniert hat (abgesehen von der Versetzung bei der Spiegelung)
Ich danke im Voraus für hilfreiche Tipps. Sogar meine 3 Ki-Bots sind ratlos und haben keine Lösung.
2 Antworten
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.
- 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.
- 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.
- 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