- den Wurfbogen einer Granate
- den Sprungbogen der Infanteristen
- vllt. Projektile, die mit Entfernung an Höhe verlieren
Das ist nicht sonderlich schwer. Betrachten wir Granate und Infanterist beide mal als Physik-Objekt. Dieses Objekt benötigt nur die folgenden Eigenschaften:
- Position (x, y)
- Geschwindigkeit (vx, vy)
Wenn du jetzt z.B. eine Granate abfeuern willst, dann gibst du ihr eine hohe Anfangsgeschwindigkeit, z.B. (100, -100). Das wäre ein 45°-Winkel nach rechts oben (vorausgesetzt deine x-Achse läuft von links nach rechts und deine y-Achse von oben nach unten).
Nun machst du bei der Aktualisierung des Spiels (sollte so oft wie möglich pro Sekunde passieren) folgende Berechnungen, um das Objekt weiterzubewegen:
x = x + (t * vx)
y = y + (t * vy)
(Die Klammern sind unnötig, sind nur zum besseren Verständnis da.)
t ist hierbei die "Zeitvariable". Wenn du das Spiel 50x pro Sekunde aktualisierst, sollte t = 1/50 sein, d.h. das Spiel wird dann immer jeweils um eine fünfzigstel Sekunde weiterbewegt. Das dann 50x, und es passt.
Nun brauchen wir noch Gravitation:
vy = vy + (t * 9.81)
Mit dem Wert 9.81 musst du dann wohl noch was rumspielen. Wenn wir annehmen, dass eine Einheit (1 Pixel?) ein Meter ist, dann ist 9.81 realistisch für unseren Planeten.
Dann könntest du noch Luftwiderstand einbringen. Der Luftwiderstand ist quadratisch zur Geschwindigkeit, und Objekte mit großer Masse werden von ihm stärker beeinflusst als Objekte mit kleiner Masse. Wie du das umsetzen kannst, musst du dir selbst überlegen. Auf jeden Fall braucht dann jedes Objekt noch eine zusätzliche Angabe: nämlich seine Masse (üblicherweise in kg).
Ist folgendes eine Möglichkeit? Man zeichnet manuell eine große Bitmap mit allen Schritten, die die Spielfigur hat. Dann muss man die entsprechenden Teile aus der Bitmap abhängig von der bewegung des spielers an die Stelle zeichnen, an der der Spieler gerade ist (bzw sein wird, weil er sich bewegt).
Ja, so macht man das normalerweise.