Der Hintergrund
Das Ziel
Das Spiel bekommt Tiefe: Kakteen, Gras und Pilze ziehen im Hintergrund vorbei – langsamer als der Boden. Damit ist das Spiel fertig.
Das fertige Spiel
Wie es gemacht ist
Der ganze Trick steht in einer Zeile:
this.changeX(-spiel.getGeschwindigkeit() / 2);
Die Deko bewegt sich mit der halben Geschwindigkeit. Wer aus dem Zugfenster schaut, kennt den Effekt: Der Schotter am Gleis rast vorbei, der Wald dahinter zieht gemächlich, die Berge stehen fast still. Dieses Verfahren heißt Parallaxe und ist in Spielen der einfachste Weg zu räumlicher Tiefe.
Jedes Deko-Objekt sucht sich beim Erzeugen selbst ein Kostüm aus:
for (int i = 0; i < this.pickRandom(0, 3); i++) {
this.nextCostume();
}
nextCostume schaltet ein Kostüm weiter. Bei einer Zufallszahl zwischen 0 und 3
landet jedes Objekt bei einem anderen Bild – aus einer Klasse werden sechs
verschiedene Pflanzen.
Reihenfolge zählt: Was zuerst mit add hinzugefügt wird, liegt hinten. Deshalb
wird die Deko im Konstruktor der Bühne als Erstes erzeugt – sonst würden Kakteen vor
Bugs stehen.
Deine Aufgabe
a) Starte das Spiel und sieh genau hin: Wandert die Deko wirklich langsamer als der Boden?
b) Bau eine zweite, noch langsamere Ebene ein – zum Beispiel Wolken (cloud) weit
oben, mit einem Viertel der Geschwindigkeit.
c) Lass die Deko-Objekte an zufälliger Stelle wieder auftauchen, damit das Muster sich nicht wiederholt.
d) Bau eine Sonne (sun1) ein, die sich gar nicht bewegt.
Tipp: Eine zweite Ebene
Am schnellsten geht es mit einem Attribut für den Faktor:
private double faktor;
public Deko(BunnyHop pSpiel, double pFaktor) {
spiel = pSpiel;
faktor = pFaktor;
...
}
public void run() {
this.changeX(-spiel.getGeschwindigkeit() * faktor);
...
}
Dann erzeugst du die einen mit new Deko(this, 0.5) und die anderen mit
new Deko(this, 0.25).
Zum Herunterladen
Projekt: Das fertige SpielUnd jetzt?
Das Grundgerüst steht. Wie es weitergeht, entscheidest du – im Kapitel Euer Spiel findest du Ideen: ein Startbildschirm, Tag und Nacht, Lücken im Boden, ein Höchststand, der gespeichert wird.