Entwickler-Ecke
Multimedia / Grafik - Spieleprogrammierung Figur Sprung
idefix123456 - Mi 29.12.10 10:03
Titel: Spieleprogrammierung Figur Sprung
Hallo,
Ich benötige einen kleinen Anreiz wie ich meine Probleme lösen soll... Und Zwar bin ich dabei ein Spiel Programmieren ähnlich wie Super Mario in 2D. Ich besitze bisher eine Form in der ich das Level generieren lasse. Das Level besteht aus einzelnen Blöcken, also Dynamisch geladenen Bildern die anhand einer Textdatei (level.txt) im Spielfeld also in der Form Platziert werden. Ein Block soll also Quasi Boden, Wand, Decke bzw ein Element darstellen auf das auch drauf Gesprungen werden kann.
Die Spielfigur besteht auch nur aus einem Bild das immer an einer festen stelle in der Mitte der Form steht. Durch drücken der Pfeiltasten nach Links / Rechts wird nun ein Timer gestartet, der den Hintergrund also alle Blöcke gemeinsam um x pixel nach Links / Rechts verschiebt.
Jetzt habe ich das Problem mit dem Springen. Die Figur soll während sie Steht gerade nach Oben springen, Während Sie nach Rechts läuft einen Sprung nach Rechts, und Während sie nach Links läuft einen Sprung nach Links machen.
Ich habe nun folgende Probleme bei denen ich nicht so richtig weis wie ich diese Lösen soll.
Problem 1 Die Spielfigur soll sich in der Form nur nach Oben und Unten bewegen können... D.h. Beim gerade nach Oben Springen aus dem Stand, soll nur das Spielfigur Bild in einer Art Sprungkruve nach oben und anschließend wieder nach unten verschoben werden... Also das bild soll schnell nach oben beschleunigen, dann immer langsamer werden, irgendwann bei der höhe x stehenbleiben, und dann wieder langsam nach unten beschleunigen. Sollte direkt über der Figur ein Block sein, so soll die Figur natürlich nicht durch den Block durchspringen, sondern an diesem abprallen und wieder nach unten bewegen.
Problem 2: Während die Figur beim Laufen nach Links oder Rechts Springt soll sich diese in einer art Flugkurve bewegen, also erst bewegt sich die Figur in einer Kurve leicht nach oben und "fällt" dann wieder in der kurve nach unten. Dabei soll das Figurbild an seiner Position stehen bleiben sich nur nach oben und unten bewegen, und sich zusätzlich der Hintergrund dementsprechend schneller nach links oder rechts bewegen. Wenn ein Block im Weg ist, soll die Figur an diesem Abprallen. Wenn ein Block darunter ist, soll die Figur auf diesem landen.
Problem 3 und 4 für später: bestimmte Blöcke sollen auch wie bei Super Mario so art Fragezeichenfelder sein, die dann betätigt werden wenn man diese "anspringt". Es soll später auch Gegner geben wie bei Super Mario die in der Map hin und Herlaufen, auf die man draufspringen muss um sie auszuschalten...
Mein Hauptproblem ist derzeit das Springen nach einer gewissen Sprungkurve und das Abprallen von Objekten/Blöcken die im Weg sind. Wer kann mir Tipps geben, wie ich das ganze am besten lösen kann... Währe dankbar über ein paar Antworten...
F34r0fTh3D4rk - Mi 29.12.10 13:13
Du solltest versuchen, deine Berechnungen (also Bewegung, Kollision etc.) von deiner Darstellung separat zu berechnen. Dann musst du dir getrennt davon überlegen, wie du diese Daten darstellst. Am einfachsten wäre natürlich eine 1:1 Umsetzung. Deshalb wird man in der Regel die Spielfigur nicht als extra Image darstellen, sondern alle Grafiken in ein Bild zeichnen. Weiterhin könnte für dich das hier interessant sein:
http://wiki.delphigl.com/index.php/Timebased_Movement
Der prinzipielle Aufbau eines einfachen Spiels könnte zum Beispiel so aussehen (Pseudocode):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| while (true) do begin dt = getTimeSinceLastFrame(); for all Objects o do begin o.handleCollisions(dt); o.updateMovement(dt); o.updateAnimation(dt); end; clearFrame(); for all visible Objects o do o.draw(); end; |
Bergmann89 - Mi 29.12.10 14:02
Hey,
die Sprungkurve bekommst du hin, indem du dir eine Variable für die Geschwwindigkeit und eine für die aktuelle Position definierst. Wenn der User dann springen drückt, dann setzt du die Geschwindigkeit auf einen bestimmten Wert. Dann aktualisierst du in einem bestimmten Interval die Position und die Geschwindigkeit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var speed, pos: Single;
speed := 10;
speed := speed - 1; pos := pos + speed; |
So bekommst du eine relativ realistische Fall-Kurve. Das mit dem verschieben des Bildes hast du ja schon fertig, das musst du einfach zusätzlich noch machen.
MfG Bergmann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!