Pico 8 Tutorial 9: Verhindere, dass deine Spielfigur durch Gegenstände läuft

Pico 8 Tutorial 9: Verhindere, dass deine Spielfigur durch Gegenstände läuft

Einführung

Du hast nun eine fertige Map und eine Kamera, die deiner Spielfigur folgt. In diesem Tutorial lernst du, wie du verhinderst, dass deine Spielfigur einfach durch Gegenstände läuft (als wäre es ein Gespenst…).

Videotutorial

Wie gewohnt schaue dir gerne das folgende Video an:

Schritt 1: Markiere die Kacheln, durch die die Spielfigur nicht „hindurchgehen“ darf

Wir müssen Pico 8 irgendwie mitteilen, durch welche Objekte bzw. Gegenstände die Spielfigur laufen darf und durch welche nicht. Gehe in den SPRITE-Editor und klicke auf einen Sprite (bzw. eine Kachel), durch die man NICHT durchlaufen soll.

Rechts neben dem Bild der Kachel siehst du insgesamt 8 nebeneinanderliegende Kreise (siehe Mauszeiger auf dem Bild oben). Diese Kreise sind sogenannte „FLAGS“. Wenn du jetzt den Kreis ganz links anklickst, hast du die FLAG 0 für die ausgewählte Kachel gesetzt.

Setze nun für alle Kacheln, durch die dein Spieler NICHT einfach so durchlaufen soll, die FLAG auf 0.

Schritt 2: Überprüfe, wann eine Kachel mit gesetztem FLAG vom Spieler berührt wird

Die FLAG einer Kachel zu setzen, reicht leider nicht aus. Die Figur gleitet immer noch durch ausgewählten Kacheln. Wir müssen Pico 8 genau sagen, was er tun soll, wenn der Spieler die gesetzte Kachel berührt. Hierfür brauchen wir zwei insgesamt zwei Funktionen. Wie im letzten Tutorial mache ich es dir ein bisschen einfach(er). Du kannst dir die von mir erstellte Funktion in deinen Code kopieren, solltest aber ungefähr verstehen, was genau der Code macht.

Schauen wir uns zunächst die Funktion check_map_flag an:

Funktion 1: check_map_flag

Was macht diese Funktion?

Diese Funktion überprüft, ob der Spieler eine Kachel berührt, für die ein FLAG gesetzt wurde.

Schritt 3: Die Kollisionsfunktion

Die zweite Funktion ist nun unsere eigentliche Kollisionsfunktion:

Schritt 4: Füge die beiden Funktionen in deinen Code ein

Kopiere dir die beiden Funktion (cmd und c) und füge sie in TAB 6 ein (cmd und v)

Schritt 5: Füge deinem Spieler-Objekt zwei weitere Eigenschaften hinzu

Damit unsere Funktionen überprüfen können, ob ein Spieler mit einer markierten Kachel kollidiert, brauchen sie zwei weitere „Eigenschaften“ unseres Spielerobjekts: Höhe der Spielerfigur in Pixel und Breite der Spielfigur in Pixel.

Gehe auf TAB 0 und füge deinem Spielerobjekt die folgende Eigenschaften hinzu:

Dein Spielerobjekt sollte nun wie folgt aussehen:

Schritt 6: Rufe unsere Kollisionsfunktion in der Update-Funktion auf

Zu guter Letzt müssen wir unsere Kollisionsfunktion an den richtigen Stellen aufrufen und ihm die korrekten Werte für den jeweiligen Fall übermitteln.

Gehe in TAB 2

Füge nun innerhalb des ersten IF-Befehls (if btn(0) then), direkt unter dem Funktionsaufruf _animation(false) die folgende Zeile ein:

Dein Code sollte nun wie folgt aussehen:

Wir übermitteln unserer Funktion mit Namen „Kollision“ 4 Werte:

  1. Wert: Spieler (unser Spieler-Objekt aus TAB0)
  2. 0: Der Wert der FLAG, die unsere Kollisionsfunktion überprüfen soll (In unserem Fall ist es 0)
  3. 1.5: Der X – Wert, um den die Spielfigur zurückgestoßen werden soll, wenn es eine markierte Kachel links berührt. Verhindert, dass die Spielfigur an einem Objekt kleben bleibt
  4. 0: Der Y-Wert, um den die Spielfigur zurückgestoßen werden soll, wenn es eine markierte Kachel oben oder unten berührt. Da sich unsere Figur in diesem IF-BLOCK nach links bewegt, soll sie nicht nach oben oder unten zurückgestoßen werden (sondern nach rechts). Deshalb übermitteln wir hier den Wert 0.

Füge nun für die folgenden If-Blöcke die folgenden Codezeilen ein:

If Block:Codezeile:
if btn(1) thenkollision(spieler,0,-1.5,0)
if btn(2) thenkollision(spieler,0,0,1.5)
if btn(3) thenkollision(spieler,0,0,-1.5)

Deine gesamte UPDATE-Funktion in TAB2 sollte nun wie folgt aussehen:

Starte das Spiel. Unsere Spielfigur läuft nun nicht mehr durch die markierten Gegenstände 🙂

Comments

No comments yet. Why don’t you start the discussion?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert