Konzepte für Jump and Run-Spiele
Bitte beachte, dass dieser Artikel noch unvollständig ist! Hilf mit, ihn fertigzustellen.
Näheres dazu findest du ggf. auf der Diskussionsseite. Wenn du der Meinung bist, dass der Artikel vollständig ist, kannst du diesen Hinweis entfernen.
Dieser Artikel soll dir zeigen, was ein Jump 'n' Run ist, wie ein Jump 'n' Run-Spiel aufgebaut ist und was zu beachten ist, wenn man ein eigenes programmiert.
Inhaltsverzeichnis |
Was ist ein Jump 'n' Run?
In Jump 'n' Runs geht es prinzipiell darum, mit dem Spieler (engl. player) durch Level zu springen und zu rennen. "Platformer" ist das englische Synonym des Jump 'n' Runs-Genres. [1]
Bekannte Jump 'n' Runs
Bekannte Jump 'n' Runs sind z.B. die Mario- bzw. Super Mario-Reihe von Nintendo und die Sonic-Reihe von Sega.
Wie ist ein Jump 'n' Run aufgebaut?
2D-Jump 'n' Runs
Auch heute wird bei Jump 'n' Runs oft noch auf 2D-Grafik gesetzt, da für das Spielprinzip zwei Dimensionen vollkommen ausreichen.
Kachelbasierte Spiele
2D-Jump 'n' Runs sind meist kachelbasierte Spiele[2], da man diese Technologie einfach und schnell umsetzten kann. Wenn die Kacheln richtig gemalt werden, sieht es so aus, als wäre das Level ein einziges Bild. Ein weiterer Vorteil der Kacheltechnik ist, dass sie Kollisionserkennung erleichtert und somit Rechenleistung spart.
Wie programmiert man ein Jump 'n' Run?
Hier wird nur gezeigt, wie man physikalische Eigenschaften in Code umsetzt und ein paar Tricks gezeigt. Es wird in Pseudo-Code geschrieben.
Player
Der Player ist der wichtigste Teil eines Jump 'n' Runs und er muss viel können.
Variablen
Ein Player sollte folgende Variablen besitzen:
- eine X- und eine Y-Position
- eine X- und eine Y-Geschwindigkeit
- ein alte X- und eine alte Y-Position
- ein oder mehrere Sprites
program Player { Zahl x Zahl y Zahl xSpeed Zahl ySpeed Zahl altX Zahl altY Bild sprite }
Springen
function Springen () { ySpeed = -100 //Hier belibige zahl nehmen. Die Zahl ist negativ, da der oberste Pixel im Fenster die 0 ist. } function Update (Zahl ΔZeit) { //ΔZeit ist die Differenz der Systemzeit des letzten und des jetzigen Frames. y = y + ySpeed * ΔZeit ySpeed = ySpeed + 9,81 //Physikalisch nicht 100% korrekt, aber einfach zu verstehen und umzusetzen. }
Kollisionen bei kachelbasierten Spielen
Damit Kollisionen funktionieren muss man auf die alle Kacheln zugreifen können. So funktioniert die Kollisionserkennung.
function Update () { altX = x altY = y ... laufen und springen ... for alleKacheln if kollidiert then x = oldx y = oldy //Setzt den Spieler auf die richtig Position zurück }
Diesen Code kann man auch bei allen anderen Spielen einsetzten, man muss nur die Kollision richtig (anders) überprüfen. Bei großen Leveln ist die überprüfung aller Kacheln in jedem Frame sehr zeitaufwendig, dann lohnt es sich die Level in "Chunks" (kleinere Bereiche) aufzuteilen.
Background
Der Backgound ist das Bild, das im Hintergrung (engl. background) des Levels zu sehen ist.
Ein einfacher Background der sich mitbewegt
program Background { Zahl x Bild background function Update (Zahl ΔZeit) { x = x + Player.xSpeed * ΔZeit * 0,25 //* 0,25 damit sich der Hintergrund langsamer bewegt if x < 0 then x = frameWidth if x > frameWidth then x = 0 } function Render () { background.RenderAtPosition(x, 0) background.RenderAtPosition(x - frameWidth, 0) background.RenderAtPosition(x + frameWidth, 0) } }