How to make a Platform game

6

Index

Tagged

Contributors

Stats

41,246 visits, 56,513 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 11 Jan, 2017. Last updated 25 Feb, 2019

Einen Feind einfügen

Du weißt bereits, wie du Sprites und Snimation einfügen kannst. Der Professionalität halber, werden diese Schritte nicht in Gänze wiederholt. Fügen wir einen neuen Sprite für den Feind hinzu.

1. Füge ein neues Sprite-Objekt in das Layout ein.

2. Importiere den Enemies\Snail Sprite Strip.

3. Lösch ersten, leeren Animations-Frame.

4. Setze die Animation auf looping, speed 15.

5. Setze den Origin auf die Base des Schneckenbildes, und füge es zu der ganzen Animation an.

6. Schneide alle Frames zu (Shift + crop).

7. Schließe den Animation editor und nenne das Objekt in 'SnailEnemy' um.

8. Platziere es auf den Boden-Tile wie angezeigt.

Jetzt wollen wir folgende Logik implementieren:

- Wenn der Spieler von der Seite in die Schnecke rennt, blinkt dieser auf und wird verletzt.

- Wenn der Spieler auf die Schnecke springt, wird diese tot gemacht.

Um den Spieler aufblinken zu lassen, selektier den Spieler und füge den Flash behavior hinzu. Achte darauf, wirklich deine Spielfigur zu selektieren, nicht das PlayerBox Object (da es der sichtbare Spieler ist, den wir blinken lassen wollen). Wir nutzen die 'Flash' action dieses behaviors in einem Moment.

Wechsle zur event sheet Ansicht, und klick 'add new event':

PlayerBox -> On collision with another object -> SnailEnemy

Dieses Event startet, wenn wir mit dem SnailEnemy von einem beliebigen Winkel aus, in Berührung kommen. Wir können dann sub-events dazu nutzen, um zu testen, ob der Spieler auf die Schnecke springt oder gegen sie läuft. Als erstes testen wir, ob der Spieler über sie ist.

Füge ein sub event zum collision event:

PlayerBox -> Is falling

Wir sollten auch testen, ob der Spieler wirklich über der Schnecke ist. Das verhindert, dass sie tot gemacht wird, obwohl wir über sie hinweg springen, eine Klippe hinunter. Rechtsklick die 'Is falling' Kondition und selektier 'Add another condition'. Merke dir, dass alle Konditionen für das Event erfüllt sein müsse, damit es startet. Füge diese Kondition ein:

PlayerBox -> Compare Y -> Less than, SnailEnemy.Y

Die Y Achse erhöht sich nach unten, also wenn die Y Koordinate des Spieler niedriger als die der Schnecke ist, sind diese darüber.

Füge in dieses Event folgende Aktion hinzu:

SnailEnemy -> Destroy

Wir können es auch so machen, dass der Spieler von ihr wegprallt:

PlayerBox -> Set vector Y -> -700

'Set vector Y' setzt im Grunde die vertikale Geschwindigkeit der Plattform-Bewegung; es auf einen negativen Wert zu setzen, lässt es aufsteigen (nochmal, die Y Achse vergrößert dessen Wert nach unten hin), zudem ist 700 weniger als die Sprungstärke von 1100. Das wird den Spieler mit einem kleinen Sprung zurückprallen lassen.

Wir sind noch lang nicht fertig: Rechtsklicke den Rand des 'Is falling' Events (der Platz zu der Linken des PlayerBox Icons) und selektiere Add -> Else. 'Else', also 'sonst', ist eine besondere Kondition, die abläuft, falls das vorherige Event nicht eingetreten ist. Also wird dieses Event eintreten, falls wir mit der Schnecke kollidiert sind, jedoch nicht wenn wir auf sie gesprungen sind - wir sind von der Seite in sie gerannt. In diesem Event, wollen wir den Spieler sich verletzen lassen. Füge die Aktion

Player -> Flash -> (belass die Werte beim Standard und akzeptiere mit Done) hinzu.

Merke: Der Flash/Blink behavior ist im Player/Spieler -Objekt, nicht in der PlayerBox.

Okely dokely, der Spieler würde jetzt jedoch niemals abkrepeln, der würde nur blinken. Doch haben wir die Ermittlung arrangiert, ob der Spieler nun springt oder in die Seite läuft. Dieses Tutorial wird nicht jede Kleinigkeit unter die Lupe nehmen, doch bestimmt wirst du herausfinden, wo man Kill-Effekte erstellen kann (versuch ein 'puff' Sprite auf der SnailEnemy, wenn sie zerstört ist, mittels der 'Spawn object' action der SnailEnemy) und wo man Lebenspunkte abziehen kann (in dem Event, welches den Spieler blinken lässt - du kannst darüber mehr lernen, Instance Variables einzusetzen im top-down shooter Tutorial welches du dir gleich nach dem hier reinziehen kannst).

Nun solle die Schnecke auf der Plattform sich vor und zurück bewegen können.

Den Feind mobil machen

Das Hauptproblem beim Bewegen der Schnecke, ist, wie man überprüfen kann, ob sie die Kante der Plattform erreicht hat. Die einfachste Weise, das zu erzielen, ist es unsichtbare 'Kanten' -Markierer zu erstellen. Das sind einfache Sprites, welche die Bewegungsrichtung der Schnecke umdrehen lassen.

Ebenfalls können wir den Platform behavior für die Schnecke benutzen. Das wäre günstig, denn:

- es kann sie nach links und rechts bewegen lassen

- sie wird Neigungen mit entsprechender auf- und ab-Bewegung begegnen

- sie kann Abhänge hinunterfallen, wenn du willst

- falls du einen springenden Feind erstellen willst, kannst du ihn mit der 'simulate control' action automatisch springen lassen.

Füge dem SnailEnemy sprite den Platform behavior zu. Da wir diesem Objekt keine komplizierten Animationen verleihen, können wir einfach den Platform behavior für das Objekt nutzen, ohne einem unsichtbaren 'Box' Object. Jedoch solltest du, willst du kompliziertere Feinde erstellen, die zuvor durchexerzierte Box-Objekt-Technik für diese verwenden.

Wir wollen nicht, dass der Spieler die Schnecke steuern kann - wir wollen, dass das automatisch vonstattengeht. Das können wir, indem wir die Default controls Eigenschaft auf No stellen und dann die Simulate control action benutzen. Da Schnecken n bissel langsam snd, stelle die Max speed auf 50 und dessen Acceleration/Beschleunigung und Deceleration/Abbremsung auf 100!

Wir brauchen auch unsere 'Ecken'-Markierungen. Füge ein Sprite object hinzu und lade einfach ein opakes Rechteck. Nenn es EdgeMarker. Setze dessen Größe auf 40 x 40 und dessen Initial visibility auf Invisible, somit wir es nicht sehen können. Platziere es auf jeder der der Schnecke zugehörigen Plattform (strg+ziehen, um zu kopieren):

Die Schnecke muss auch wissen, in welche Reichtung sie sich gerade bewegt - links oder rechts. Das können wir mit Instance Variablen. Das sind einfach Zahlen oder Buchstaben, gespeichert in den Objekten. Falls unser Spiel multischneckial ist, speichert jede ihre Instance Variablen separat. Das erlaubt es, jede Schnecke ihre eigene Menge an Gesundheit haben zu lassen, aktuelle Richtung, und so weiter. Eine simple Technik, Feinde automatisch zu kontrollieren, ist es "action" instance Variablen zu verwenden, welche ihren aktuellen Zustand in sich tragen. Z.B. könnte es "renn weg", "verfolge Spieler" or "warte" sein. In diesem Fall brauchen wir nur "links" und "rechts", doch ist es von Nutzen, es auf gleiche Weise einzurichten.

Selektiere das SnailEnemy-Objekt. In der Properties bar, klick Add / Edit unter 'Instance variables'.

Ein Dialog, welche alle Instance Variablen für das Objekt auflistet erscheint. Klick das 'add' Icon, um ein Neues zu erstellen. Dessen Namen in action ändern, den Typ zu text und den initial value zu right (um nach rechts zu gehen).

Klick OK und schließe den instance variables-Dialog. Wechsle zum event sheet.

Wir wollen folgende Logik implementieren:

- falls action ist "rechts", simuliere die Plattform Bewegung, während die 'rechts'-Taste gedrückt ist, dahingehend, dass die Schnecke nach recht gehen soll.

- falls action ist "links", simuliere die Plattform Bewegung, während die 'links'-Taste gedrückt ist, dahingehend, dass die Schnecke nach links gehen soll.

Zudem:

- falls die Schnecke auf den EdgeMarker trifft, drehe um dessen action (falls "links" setze es auf "rechts"; falls "rechts" setze es auf "links").

Wir können die Bewegung mit folgenden zwei Events einstellen:

Event: SnailEnemy -> Compare/vergleiche instance variable -> action gleich "right" (benutze doppelte Anführungsstrichel, um Text zu anzudeuten)

Action: SnailEnemy -> Simulate control -> Right

Das Selbe für links. Wir wollen auch, dass sich das Bild nach links und rechts spiegelt. Also füge hinzu SnailEnemy -> Set mirrored im "left" Event, und SnailEnemy -> Set not mirrored im "right" Event. Du solltest mit dem hier enden:

Nun zur Umdrehung der Bewegungsrichtung der Schnecke:

Event: SnailEnemy -> On collision with another object -> EdgeMarker

Subevent: SnailEnemy -> Compare instance variable -> action equal to "right"

Action: SnailEnemy -> Set value -> action auf "left"

Subevent: Else

Action: SnailEnemy -> Set value -> action auf "right"

Es ist wichtig, hier Else zu verwenden, denn Events werden von oben nach unten abgearbeitet. Falls statt 'else' wir 'action equal to "left"' sagen würden; beachte, dass das vorhergehende Event dies bereits dahingehend eingestellt haben würde. Also würde es einfach nur zurückstellen, ohne effektiven Effekt. Mit 'else', hindern wir das zweite Event daran, ausgeführt zu werden, sollte das erste bereits eingetreten sein.

Starte das Projekt. Beachte, wie die Schnecke sich auf der Plattform vorwärts und rückwärts bewegt - sehr schneckisch. Da kann man nur mit ein wenig mehr Mühe drauf hüpfen! Das ist ein sehr primitives "KI" -System, doch kannst du mit mehr Events in deren Bewegung die Feinde klüger machen, möglicherweise diese sogar Klippen hinunterfallen lassen, oder andere Marker benutzen, um einen Sprung auszulösen, um es aussehen zu lassen, der Feind wüsste, wo man auf eine Plattform springen kann.

Versuche, eine Plattform mit zwei Schnecken zu erstellen. Beachte, wie sie sich individuell kontrollieren, da sie ihre eigenen individuellen action instance Variablen in deren aktuellen Zustand in sich tragen. Du kannst erkennen, wie wichtig Instance Variablen sind, um Instanzen unabhängig voneinander kontrollieren zu können - sie müssen nicht das gleiche zur exakt gleichen Zeit tun!

  • 0 Comments

Want to leave a comment? Login or Register an account!