Kontrollstrukturen können mehr als eine Bedingung haben.Die Schlüsselwörter else und elseif können zusätzliche Szenarien für das erstellen, was unter mehreren Bedingungen passieren soll.Die Syntax sieht wie folgt aus:
Zeigt Syntax für elseif und else
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
In diesem Projekt werden else und elseif verwendet, um einen Parkour-Kurs zu codieren, bei dem Läufer Auszeichnungen erhalten, abhängig von ihrer Ziellzeit.

Mehrere Bedingungen codieren
Für dieses Projekt könnten Sie eine einzigartige if-Anweisung für jede Medaille schreiben, um Spieler zu verleihen, aber das braucht viel Zeit.Nehmen wir zum Instanzden imaginären Code unten.
Alle if-Statements
if finishTime < 5 then-- Erhalte eine Goldmedailleendif finishTime >= 5 and <= 10 then-- Erhalte eine Silbermedailleendif finishTime > 10 and <= 15 then-- Erhalte eine Bronzemedailleend
Eine effizientere und leserlichere Art, dies zu codieren, besteht darin, eine einzige if-Anweisung zu verwenden und das Schlüsselwort elseif zu verwenden, um alternative Bedingungen zu liefern, um zu testen, ob die vorherigen Bedingungen nicht wahr sind.
Verwendet elseif und else
if finishTime < 5 then-- Erhalte eine Goldmedailleelseif finishTime >= 5 and <= 10 then-- Erhalte eine Silbermedailleelseif finishTime > 10 and <= 15 then-- Erhalte eine Bronzemedailleend
Wenn die if/then-Anweisung ausgeführt wird, beginnt sie oben und führt nur den Code für die erste echte Bedingung aus, die sie findet.
Stelle den Rennstrecken auf
Beginne, indem du den Startpunkt und das Ziellinie des Kurses platzierst, und erstelle dann ein Skript, um die Zeit des Spielers zu messen und verschiedene Medaillen zu vergeben.
Erstelle ein verankertes Teil namens FinishLine.Um das Testen schneller zu machen, stelle den Anfang und das Ende nahe beieinander.Du kannst die Ziellinie verschieben, nachdem du das Skript, das. PL: die Skriptsabgeschlossen hast.
Teil abschließen >Gesamter Kurs >In der Ziellinie füge ein Skript namens RaceManager ein.Füge dann eine Variable hinzu, um zu speichern, wie viele Sekunden seit Beginn des Rennens vergangen sind, und eine zweite Variable, um FinishLine zu referenzieren.
local finishLine = script.Parentlocal timePassed = 0Erstelle eine Funktion mit dem Namen finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endAuf eigene besitzen:
- Code eine Funktion namens partTouched(), die finish() läuft, wenn ein Spieler sie berührt.
- Verbinde das Ziellinien-Teil mit partTouched().
- Vergleiche deinen Code mit dem Beispiel unten.
local function finish()print("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Teste deinen Spielablauf und überprüfe, dass finish() angerufen wird, wenn du die Ziellinie berührst.
Verhindere, dass finish() sich wiederholt
Im Moment wird immer, wenn ein Spieler die Ziellinie berührt, finish() kontinuierlich aufgerufen, solange der Spieler den Teil berührt.
Verwende ein boolesches , eine Variable, die wahr oder falsch speichert, um sicherzustellen, dass finish() nur einmal aufgerufen wird.
Erstelle eine neue Variable mit dem Namen raceActive und stelle sie auf true ein.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Läuft jedes Mal, wenn der Spieler den Ziellinienabschnitt berührtlocal function finish()Füge einer zweiten Bedingung zur if-Anweisung hinzu, um zu überprüfen, ob raceActive wahr ist, bevor du finish() aufrufst.
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendUm zu verhindern, dass finish() erneut aufgerufen wird, stellen Sie raceActive auf false ein.
local function finish()print("touched the finish line")raceActive = falseendTeste dein Spiel, um sicherzustellen, dass du nur deine Testdruckausgabe einmal siehst.
Behalte die Zeit im Auge
Wie eine if-Anweisung kann auch eine While-Schleife eine Bedingung verwenden, um zu sehen, ob sie ausführensoll.Um den Spieler:inzu zeitigen, erstelle einen Timer mit einem While-true-Loop, der nur läuft, wenn der raceActive boolesche Wert true ist.
Am Ende des Skript, das. PL: die Skriptsgeben Sie while raceActive == true do ein. Drücken Sie die Eingabetaste, um automatisch zu vervollständigen und die end hinzuzufügen.
finishLine.Touched:Connect(partTouched)while raceActive == true doendUm die Spieler zu zeitigen, in der Schleife, füge 1 zur timePassed Variable einmal alle Sekunde hinzu. Füge eine Druckausgabe-Anweisung hinzu, um deine Arbeit zu testen.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endSpiele das Spiel und überprüfe, ob du jede Sekunde im Ausgabe-Fenster angezeigt siehst.
Preis-Spieler-Medaillen
Um abzuschließen, verwende eine if-Anweisung mit mehreren Bedingungen, um Spielern eine unterschiedliche Preismedaille basierend auf ihrer Erfüllungzu verleihen.Verwende ein if-Statement und zwei elseif-Statements, um die Abschlusszeit des Spieler:inzu überprüfen und ihm die richtige Medaille zu verleihen.
Um zu bestätigen, dass jede Medaille verliehen werden kann, verwende Druckausdrücke.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endUm eine Goldmedaille zu vergeben, gib ein if-Statement ein, das timePassed mit der gewünschten Ziellzeit vergleicht.Dieses Beispiel prüft, ob die Zeit des Spieler:inweniger als oder gleich 10 Sekunden war.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendTeste dein Spiel und bestätige, dass die Goldmedaille verliehen werden kann.
Füge zusätzliche Bedingungen hinzu
Jetzt, da du für die Goldmedaille getestet hast, gib die Codebedingungen für die anderen Medaillen mit dem elseif-Schlüsselwort an.
Für die Silbermedaille verwende elseif und die nächste gewünschte Zeitspanne.In diesem Beispiel ist die Reichweite größer als 10 Sekunden, aber kleiner als oder gleich 20 Sekunden.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endendVerwende das gleiche Muster für die Bronzemedaille. Überprüfe deinen Code mit dem Beispiel unten.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endendTeste deine Silber- und Bronzemedaille.
Problemlösungstipps
Wenn du die silbernen und bronzefarbenen Metalle nicht siehst, versuche eines der folgenden.
- Jede elseif sollte dann nach ihrer Bedingung haben.
- In partTouched() stellen Sie sicher, dass die zweite Bedingung der if-Anweisung == verwendet, wie in raceActive == true.
- Überprüfe, dass jedes elseif im Umfang ist. Jede elseif Bedingung muss zwischen der ersten Zeile der if/then-Anweisung und ihrer letzten end liegen.
Füge die anderen Bedingung hinzu
Wenn der Spieler keine Medaille verdient hat, solltest du ihn ermutigen, es erneut zu versuchen.In diesem Fall kannst du eine else-Aussage verwenden, die ausgeführt wird, wenn keine anderen Bedingungen wahr sind, um ihnen eine Nachricht zu zeigen.
Unter der letzten elseif und über end beginne eine neue Zeile und gib else ein. Füge dann nicht hinzu.Unterhalb von allem verwende eine Druck statement, um sie aufzufordern, erneut zu versuchen.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
2. Spieltest, um die andere Nachricht zu sehen.
Übersicht
Kontrollstrukturen können mehr als ein Szenario haben.Verwende if-Statements, um die ursprüngliche Aussage zum überprüfeneinzurichten und dann so viele elseif Bedingungen hinzuzufügen, wie nötig.Schließlich verwende else, um anzugeben, was passieren soll, wenn alle angegebenen Bedingungen falsch sind.
Beginnend oben werden alle Bedingungen überprüft, und nur die erste wahre Bedingung führt den Codesaus.Die verbleibenden Bedingungen werden nicht überprüft, und ihr Code wird nicht ausführen.
Nach Abschluss des Projekts kannst du das Skript erweitern, um neue Elemente auf ein paar zusätzliche Weise hinzuzufügen.
- Füge Code hinzu, damit Spieler das Rennen wiederholen können, indem sie die Startlinie berühren, wenn sie fertig sind.
- Entwerfen Sie einen Weg, um die Zeit während eines Rennens anzuzeigen.Du kannst die Zeit auf einem Teil mit einer grafische Benutzeroberflächeanzeigen, wie im Erstellen einer zeitgesteuerten Brücke-Tutorial.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Wird verwendet, um zu verhindern, dass finish() und Timer sich wiederholen, wenn das Rennen vorbei ist
local raceActive = true
-- Läuft, wenn der Spieler die Ziellinie berührt und ihm einen Preis zeigt
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- Überprüft, ob ein Spieler das Teil berührt, wenn ein Rennen aktiv ist
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- Verfolgt die Rennzeit, während das Rennen aktiv ist. Muss am Ende des Skripts sein.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end