Swing Copters Klon selbst programmieren – so geht’s [3]

    0

Wir zeigen Euch, wie Ihr Euren eigenen Swing Copters Klon programmieren könnt. Nach Teil 1 und Teil 2 heute Teil 3 – die Hindernisse.

Schritt 1: Damit wir nicht nur sinnlos nach links und rechts fliegen, müssen Hindernisse her. Dazu legt Ihr wieder einen neuen Tab an, der in diesem Fall Obstacle heißt. Dieser benötigt dann vier Funktionen – eine zum Starten, eine zum Bewegen, eine zum Anzeigen und eine zum Zurücksetzen. Es ist nämlich einfacher, die Hindernisse, sobald sie aus dem sichtbaren Bereich verschwunden sind, einfach zurück an den Anfang zu setzen, als jedes Mal ein neues Objekt zu erzeugen. Also füllt Ihr den leeren Tab erst einmal mit diesen Zeilen:

public class Obstacle
{
void init()
{}
void move()
{}
void show()
{}
void getRespand()
{}
}

Wenn das Objekt erzeugt wird, benötigt es: jeweils eine Position für die X- und Y-Achse, eine Länge, eine Höhe und der Einfachheit halber auch einen Wert für die „Lücke“ zwischen beiden Hindernissen, durch die das Flugobjekt sich später bewegen soll. Dazu fügt Ihr erst einmal vor der Zeile void init() folgendes hinzu:

float xPos;
float yPos;
float obstacleLength;
float obstacleHeight = 25;
int gap = 200;

Hierbei fällt auf – nur die Höhe des Hindernisses und die Länge der Lücke legen wir schon hier fest. Der Grund: Diese sollen sich nicht ändern. Position und Länge sollen ja jedesmal unterschiedlich sein. Nun wird die init() Funktion so überarbeitet, dass sie bei jedem Aufruf die Werte neu setzt:

void init()
{
xPos = 0;
yPos = 0;
obstacleLength = random(125,325);
}

Die Länge des Hindernisses wird jedemal zufällig generiert und beträgt zwischen 125 und 325 Pixeln. Da das Objekt ja oben starten soll, wird die Y-Position auf 0 gesetzt und damit es auch vom Rand aus losgeht, ist auch X 0. Die Bewegung ist denkbar einfach:

void move()
{
yPos+=3;
}

So bewegt sich das Hinderniss immer um 3 Pixel nach unten. Wollt Ihr, dass es schneller wird, müsst Ihr einfach den Wert erhöhen – das gilt auch für die andere Richtung. Anzeigen lassen wir uns statt einem Bild einfach ein Quadrat, da es verschiedene Vorteile bringt – so ist es zum Beispiel leicht in der Größe zu verändern.

void show()
{
rect(xPos,yPos,obstacleLength,obstacleHeight);
rect(xPos+obstacleLength+gap,yPos,width,obstacleHeight);
}

Das erste Quadrat ist leicht zu verstehen, doch das zweite etwas komplizierter. Dieses soll ja nicht direkt am Rand des Bildschirms angezeigt werden, sondern erst nach der Lücke, durch die Ihr später fliegen könnt. Also ist die X Position die X Position des ersten Quadrats + dessen Länge + die Länge der Lücke. Eigentlich gar nicht so schwer. Nun wollen wir noch sicherstellen, dass die Hindernisse auch wieder oben erscheinen, wenn sie unten verschwunden sind. Dazu ändern wir die bereits angelegt getRespawn() Funktion so ab:

void getRespawn()
{
if(yPos>height)
{init();}
}

Schritt 2: Sobald die Y Position nun also außerhalb des sichtbaren Bereiches ist, wird sie wieder nach oben gesetzt. Nun wollen wir aber auch, dass das Hinderniss angezeigt wird. Also zurück zum Haupt-Tab und fügt ganz oben diese Zeile hinzu:

Obstacle obstacleA;

In die setup() Funktion fügt Ihr dann noch diese beiden Zeilen ein:

obstacleA = new Obstacle();
obstacleA.init();

Jetzt muss das Hindernis nur noch angezeigt und bewegt werden. Das wird wieder in der draw() Funktion erledigt. Dort fügt Ihr unter der Zeile background(0,125,125); das Folgende hinzu:

obstacleA.move();
obstacleA.show();
obstacleA.getRespawn();

Startet Ihr die Anwendung nun, sollte sich eine weiße Linie immerzu von oben nach unten bewegen. Ein Hindernis ist allerdings zu wenig. Also erzeugen wir drei. Dazu wiederholt Ihr Schritt 2, nur schreibt Ihr diesmal statt obstacleA einmal obstacleB und einmal obstacleC. Damit die drei aber nicht gleichzeitig erscheinen, sollten wir noch etwas einführen – eine Zeit, die das Programm schon läuft. Deswegen fügt Ihr vor die setup() Funktion noch diese Zeile hinzu:

int runningTime = 0;

Damit diese auch erhöht wird, fügt Ihr in die Funktion draw() noch diese Zeile an:

runningTime++;

Und wir fügen noch eine Abfrage ein. Wenn diese Bedingung erfüllt ist, wird das Hinderniss angezeigt. Die draw() Funktion sollte dann also so aussehen:

void draw()
{
background(0,125,125);

runningTime++;

Protagonist.show();
Protagonist.move();

obstacleA.move();
obstacleA.show();
obstacleA.getRespawn();

if(runningTime>360)
{
obstacleB.move();
obstacleB.show();
obstacleB.getRespawn();
}
if(runningTime>720)
{
obstacleC.move();
obstacleC.show();
obstacleC.getRespawn();
}
}

Swing Copters Klon Schritt 3

Nach einer gewissen Zeit werden so die beiden anderen Hindernisse angezeigt. Bisher kein schlechter Fortschritt. Das nächste Mal sehen wir uns dann an, wie die Kollision mit diesen erkannt wird und dann sind wir schon so gut wie fertig. Den heutigen Fortschritt könnt Ihr hier herunterladen und selbst ausprobieren.

Teile
in diesem Artikel

Anzeige

Deine Meinung ist wichtig

Die Kommentarfunktion von Disqus wird als Frame eingebunden. Wenn Sie eine Meinung/einen Kommentar abgeben wollen, verlassen Sie damit unsere Webseite/App und posten über Disqus.