Kontrollstrukturen können mehr als eine Bedingung haben. Die Schlüsselwörter else und elseif können zusätzliche Szenarien schaffen, für das, was unter mehreren Bedingungen geschehen sollte. Die Syntax sieht so aus:
Zeigt die Syntax für elseif und elseif isGreen thenprint("Go")elseif isYellow thenprint("Langsam")elseif isPedestrians thenprint("Warten")elseprint("Stop")end
In diesem Projekt werden else und elseif verwendet, um einen Parkourkurs zu codieren, bei dem Läufer je nach ihrer Zielzeit Auszeichnungen erhalten.

Mehrere Bedingungen codieren
Für dieses Projekt könnten Sie für jede Medaille eine einzigartige if-Anweisung schreiben, um die Spieler auszuzeichnen, aber das dauert viel Zeit. Nehmen wir zum Beispiel den imaginären Code unten.
Alle if-Anweisungenif finishTime < 5 then-- Erhalten Sie eine Goldmedailleendif finishTime >= 5 and <= 10 then-- Erhalten Sie eine Silbermedailleendif finishTime > 10 and <= 15 then-- Erhalten Sie eine Bronzemedailleend
Eine leserlichere und effizientere Möglichkeit, dies zu codieren, besteht darin, eine einzige if-Anweisung zu verwenden und das Schlüsselwort elseif zu nutzen, um alternative Bedingungen bereitzustellen, um zu testen, ob die vorherigen Bedingungen nicht wahr sind.
Verwendet elseif und elseif finishTime < 5 then-- Erhalten Sie eine Goldmedailleelseif finishTime >= 5 and <= 10 then-- Erhalten Sie eine Silbermedailleelseif finishTime > 10 and <= 15 then-- Erhalten Sie eine Bronzemedailleend
Wenn die if/then-Anweisung ausgeführt wird, startet sie oben und führt nur den Code für die erste wahre Bedingung aus, die sie findet.
Richten Sie den Rennkurs ein
Beginnen Sie damit, den Startpunkt des Kurses und die Ziellinie festzulegen, und erstellen Sie dann ein Skript, um den Spieler zu timen und verschiedene Medaillen zu verleihen.
Erstellen Sie ein befestigtes Teil mit dem Namen FinishLine. Um die Tests zu beschleunigen, platzieren Sie den Start und das Ende nah beieinander. Sie können die Ziellinie nach Abschluss des Skripts verschieben.

Zielteil 
Gesamter Kurs Fügen Sie in FinishLine ein Skript mit dem Namen RaceManager ein. Fügen Sie dann eine Variable hinzu, um zu speichern, wie viele Sekunden seit dem Start des Rennens vergangen sind, und eine zweite Variable, um auf FinishLine zu verweisen.
local finishLine = script.Parentlocal timePassed = 0Erstellen Sie eine Funktion namens finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endMachen Sie es selbst:
- Codieren Sie eine Funktion namens partTouched(), die finish() ausführt, wenn ein Spieler sie berührt.
- Verbinden Sie das Zielteil mit partTouched().
- Vergleichen Sie Ihren Code mit dem Beispiel unten.
local function finish()print("Ziellinie berührt")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Testen Sie das Spiel und überprüfen Sie, ob finish() aufgerufen wird, wenn Sie die Ziellinie berühren.
Verhindern, dass finish() wiederholt wird
Momentan wird finish() jedes Mal aufgerufen, wenn ein Spieler die Ziellinie berührt, solange der Spieler das Teil berührt.
Verwenden Sie ein Boolean, eine Variable, die true oder false speichert, um sicherzustellen, dass finish() nur einmal aufgerufen wird.
Erstellen Sie eine neue Variable namens raceActive und setzen Sie sie auf true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Wird ausgeführt, immer wenn der Spieler das Ziellinienteil berührtlocal function finish()Fügen Sie eine zweite Bedingung zur if-Anweisung hinzu, um zu überprüfen, ob raceActive true ist, bevor Sie finish() aufrufen.
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendUm zu verhindern, dass finish() wieder aufgerufen wird, setzen Sie raceActive auf false.
local function finish()print("Ziellinie berührt")raceActive = falseendTesten Sie Ihr Erlebnis, um zu überprüfen, ob Sie Ihre Testausgabe nur einmal sehen.
Zeit im Auge behalten
Wie eine if-Anweisung kann auch eine while-Schleife eine Bedingung verwenden, um zu sehen, ob sie ausgeführt werden soll. Um den Spieler zu timen, erstellen Sie einen Timer mit einer while true do-Schleife, die nur ausgeführt wird, wenn das raceActive-Boolean true ist.
Geben Sie am Ende des Skripts while raceActive == true do ein. Drücken Sie Enter, um den Befehl zu vervollständigen, und fügen Sie das end hinzu.
finishLine.Touched:Connect(partTouched)while raceActive == true doendUm die Spieler zu timen, fügen Sie in der Schleife einmal pro Sekunde 1 zur Variable timePassed hinzu. Fügen Sie eine Print-Anweisung hinzu, um Ihre Arbeit zu testen.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endTesten Sie das Erlebnis und überprüfen Sie, ob Sie jede Sekunde im Ausgabefenster angezeigt bekommen.
Spieler-Medaillen verleihen
Um zu enden, verwenden Sie eine if-Anweisung mit mehreren Bedingungen, um Spielern eine andere Preismedaille basierend auf ihrer Leistung zu verleihen. Verwenden Sie eine if-Anweisung und zwei elseif-Anweisungen, um die Zielzeit des Spielers zu überprüfen und ihm die richtige Medaille zu verleihen.
Um zu bestätigen, dass jede Medaille verliehen werden kann, verwenden Sie Print-Anweisungen.
local function finish()raceActive = falseprint("Sie haben in " .. timePassed .. " Minuten beendet")endUm eine Goldmedaille zu verleihen, codieren Sie eine if-Anweisung, die timePassed mit der gewünschten Zielzeit vergleicht. Dieses Beispiel überprüft, ob die Zeit des Spielers weniger als oder gleich 10 Sekunden war.
local function finish()raceActive = falseprint("Sie haben in " .. timePassed .. " Minuten beendet")if timePassed <= 10 thenprint("Sie erhalten eine Goldmedaille!")endendTesten Sie und bestätigen Sie, dass die Goldmedaille verliehen werden kann.
Zusätzliche Bedingungen hinzufügen
Jetzt, da Sie die Goldmedaille getestet haben, codieren Sie Bedingungen für die anderen Medaillen mit dem Schlüsselwort elseif.
Für die Silbermedaille verwenden Sie elseif und den nächsten gewünschten Zeitrahmen. In diesem Beispiel liegt der Bereich über 10 Sekunden, aber weniger als oder gleich 20 Sekunden.
local function finish()raceActive = falseprint("Sie haben in " .. timePassed .. " Minuten beendet")if timePassed <= 10 thenprint("Sie erhalten eine Goldmedaille!")elseif timePassed > 10 and timePassed <= 20 thenprint("Sie erhalten eine Silbermedaille!")endendVerwenden Sie dasselbe Muster für die Bronzemedaille. Überprüfen Sie Ihren Code mit dem Beispiel unten.
local function finish()raceActive = falseprint("Sie haben in " .. timePassed .. " Minuten beendet")if timePassed <= 10 thenprint("Sie erhalten eine Goldmedaille!")elseif timePassed > 10 and timePassed <= 20 thenprint("Sie erhalten eine Silbermedaille!")elseif timePassed > 20 and timePassed <= 30 thenprint("Sie erhalten eine Bronzemedaille!")endendTesten Sie die Silber- und Bronzemedaille.
Fehlerbehebungstipps
Wenn Sie die Silber- und Bronzemedaillen nicht sehen, versuchen Sie eines der Folgenden.
- Jede elseif-Anweisung sollte ein then nach ihrer Bedingung haben.
- In partTouched() stellen Sie sicher, dass die zweite Bedingung der if-Anweisung == verwendet, wie in raceActive == true.
- Überprüfen Sie, ob jede elseif im Gültigkeitsbereich ist. Jede elseif-Bedingung muss zwischen der ersten Zeile der if/then-Anweisung und der letzten end-Anweisung liegen.
Fügen Sie die else-Bedingung hinzu
Falls der Spieler keine Medaillen verdient hat, sollten Sie ihn ermutigen, es erneut zu versuchen. In diesem Fall können Sie eine else-Anweisung verwenden, die ausgeführt wird, wenn keine anderen Bedingungen wahr sind, um ihnen eine Nachricht anzuzeigen.
Unter der letzten elseif und über end beginnen Sie eine neue Zeile und tippen Sie else. Fügen Sie kein then hinzu. Unter else verwenden Sie eine Print-Anweisung, um sie aufzufordern, es erneut zu versuchen.
local function finish()raceActive = falseprint("Sie haben in " .. timePassed .. " Minuten beendet")if timePassed <= 10 thenprint("Sie erhalten eine Goldmedaille!")elseif timePassed > 10 and timePassed <= 20 thenprint("Sie erhalten eine Silbermedaille!")elseif timePassed > 20 and timePassed <= 30 thenprint("Sie erhalten eine Bronzemedaille!")elseprint("Versuche es erneut!")endendTesten Sie, um die else-Nachricht zu sehen.
Zusammenfassung
Kontrollstrukturen können mehr als ein Szenario haben. Verwenden Sie if-Anweisungen, um die anfängliche Anweisung festzulegen, die überprüft werden soll, und fügen Sie dann so viele elseif-Bedingungen hinzu, wie erforderlich. Schließlich verwenden Sie else, um anzugeben, was passieren sollte, wenn alle angegebenen Bedingungen falsch sind.
Beginnend an der Spitze werden alle Bedingungen geprüft, und nur die erste wahre Bedingung wird den Code ausführen. Die verbleibenden Bedingungen werden nicht geprüft, noch wird deren Code ausgeführt.
Nach Abschluss des Projekts können Sie das Skript erweitern, um neue Elemente auf verschiedene Arten hinzuzufügen.
- Fügen Sie Code hinzu, damit Spieler das Rennen wiederholen können, indem sie die Startlinie berühren, wenn sie fertig sind.
- Entwerfen Sie eine Möglichkeit, die Zeit während eines Rennens anzuzeigen. Sie können die Zeit entweder auf einem Teil mit einer Surface-GUI anzeigen, wie im Erstellen Sie ein zeitgesteuertes Brücke-Tutorial.
Abgeschlossenes Skript
local timePassed = 0
local finishLine = script.Parent
-- Wird verwendet, um zu verhindern, dass finish() und der Timer wiederholt werden, wenn das Rennen vorbei ist
local raceActive = true
-- Wird ausgeführt, wenn der Spieler die Ziellinie berührt und ihnen eine Auszeichnung zeigt
local function finish()
raceActive = false
print("Sie haben in " .. timePassed .. " Minuten beendet")
if timePassed <= 10 then
print("Sie erhalten eine Goldmedaille!")
elseif timePassed > 10 and timePassed <= 20 then
print("Sie erhalten eine Silbermedaille!")
elseif timePassed > 20 and timePassed <= 30 then
print("Sie erhalten eine Bronzemedaille!")
else
print("Versuche es erneut!")
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)
-- Hält die Rennzeit fest, während das Rennen aktiv ist. Muss am Ende des Skripts sein.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end