Kontrollstrukturen können mehr als eine Bedingung haben. Die Schlüsselwörter else und elseif können zusätzliche Szenarien schaffen, was unter mehreren Bedingungen passieren soll. Die Syntax sieht folgendermaßen aus:
if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
endIn diesem Projekt werden else und elseif verwendet, um einen Parkour-Kurs 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 kostet viel Zeit. Nehmen wir zum Beispiel den imaginären Code unten.
if finishTime < 5 then
-- Erhalte eine Goldmedaille
end
if finishTime >= 5 and <= 10 then
-- Erhalte eine Silbermedaille
end
if finishTime > 10 and <= 15 then
-- Erhalte eine Bronzemedaille
endEine lesbarere und effizientere Möglichkeit, dies zu codieren, besteht darin, eine einzige if-Anweisung zu verwenden und das Schlüsselwort elseif zu verwenden, um alternative Bedingungen bereitzustellen, um zu testen, ob die vorherigen Bedingungen nicht wahr sind.
if finishTime < 5 then
-- Erhalte eine Goldmedaille
elseif finishTime >= 5 and <= 10 then
-- Erhalte eine Silbermedaille
elseif finishTime > 10 and <= 15 then
-- Erhalte eine Bronzemedaille
endWenn die if/then-Anweisung ausgeführt wird, beginnt sie oben und führt nur den Code für die erste wahre Bedingung aus, die sie findet.
Richten Sie die Rennstrecke ein
Beginnen Sie damit, den Startpunkt und die Ziellinie des Kurses zu platzieren, und erstellen Sie dann ein Skript, um die Zeit des Spielers zu messen und verschiedene Medaillen zu verleihen.
Erstellen Sie ein verankertes Teil mit dem Namen FinishLine. Um das Testen zu beschleunigen, platzieren Sie den Start und das Ende nah beieinander. Sie können die Ziellinie nach Abschluss des Skripts verschieben.

Finish Teil 
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 mit dem Namen finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endMachen Sie es selbst:
- Codieren Sie eine Funktion mit dem Namen partTouched(), die finish() ausführt, wenn ein Spieler es berührt.
- Verbinden Sie das Finish-Line-Teil mit partTouched().
- Vergleichen Sie Ihren Code mit dem Beispiel unten.
local function finish()print("Berührt die Ziellinie")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
Im Moment wird finish() jedes Mal aufgerufen, wenn ein Spieler die Ziellinie berührt, solange der Spieler das Teil berührt.
Verwenden Sie eine boolesche Variable, die true oder false speichert, um sicherzustellen, dass finish() nur einmal aufgerufen wird.
Erstellen Sie eine neue Variable mit dem Namen raceActive und setzen Sie sie auf true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Wird ausgeführt, wenn der Spieler das Teil der Ziellinie 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() erneut aufgerufen wird, setzen Sie raceActive auf false.
local function finish()print("Berührt die Ziellinie")raceActive = falseendTesten Sie Ihr Spiel, um zu überprüfen, dass Sie Ihre Testausgabe nur einmal sehen.
Zeit verfolgen
Wie eine if-Anweisung kann auch eine while-Schleife eine Bedingung verwenden, um zu sehen, ob sie ausgeführt werden soll. Um die Zeit des Spielers zu messen, erstellen Sie einen Timer mit einer while true do-Schleife, die nur ausgeführt wird, wenn die boolesche Variable raceActive true ist.
Geben Sie am Ende des Skripts while raceActive == true do ein. Drücken Sie die Eingabetaste, um die Eingabe zu vervollständigen und end hinzuzufügen.
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 Druckanweisung hinzu, um Ihre Arbeit zu testen.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endTesten Sie das Spiel und überprüfen Sie, ob Sie jede Sekunde im Ausgabefenster angezeigt bekommen.
Spieler-Medaillen verleihen
Um abzuschließen, verwenden Sie eine if-Anweisung mit mehreren Bedingungen, um den Spielern eine andere Preis-Medaille basierend auf ihrer Leistung zu verleihen. Verwenden Sie eine if-Anweisung und zwei elseif-Anweisungen, um die Zielzeit des Spielers zu überprüfen und ihnen die richtige Medaille zu verleihen.
Um zu bestätigen, dass jede Medaille verliehen werden kann, verwenden Sie Druckanweisungen.
local function finish()raceActive = falseprint("Sie haben in " .. timePassed .. " abgeschlossen")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 .. " abgeschlossen")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 .. " abgeschlossen")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 .. " abgeschlossen")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.
Fehlersuche Tipps
Wenn Sie die Silber- und Bronzemedaillen nicht sehen, versuchen Sie eine der folgenden Lösungen.
- Jede elseif sollte ein then nach ihrer Bedingung haben.
- Stellen Sie in partTouched() sicher, dass die zweite Bedingung der if-Anweisung == verwendet, wie in raceActive == true.
- Überprüfen Sie, dass jede elseif im Geltungsbereich ist. Jede elseif-Bedingung muss zwischen der ersten Zeile der if/then-Anweisung und dem letzten end liegen.
Fügen Sie die else-Bedingung hinzu
Wenn der Spieler keine Medaille 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 dem letzten elseif und über end beginnen Sie eine neue Zeile und geben else ein. Fügen Sie nicht dann hinzu. Unter else verwenden Sie eine Druckanweisung, um sie zu ermutigen, es erneut zu versuchen.
local function finish()raceActive = falseprint("Sie haben in " .. timePassed .. " abgeschlossen")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("Versuchen Sie 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 einzurichten, die überprüft werden soll, und fügen Sie dann so viele elseif-Bedingungen hinzu, wie nötig. Verwenden Sie schließlich else, um anzugeben, was passieren soll, wenn alle gegebenen Bedingungen falsch sind.
Beginnend von oben werden alle Bedingungen überprüft, und nur die erste wahre Bedingung führt den Code aus. Die verbleibenden Bedingungen werden nicht überprüft, noch wird ihr Code ausgeführt.
Nachdem Sie das Projekt abgeschlossen haben, können Sie das Skript erweitern, um auf einige zusätzliche Arten neue Elemente hinzuzufügen.
- Fügen Sie Code hinzu, damit die 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ücken-Tutorial.
local timePassed = 0
local finishLine = script.Parent
-- Wird verwendet, um finish() und den Timer zu verhindern, dass sie sich wiederholen, wenn das Rennen vorbei ist
local raceActive = true
-- Wird ausgeführt, wenn der Spieler die Ziellinie berührt und zeigt ihnen eine Auszeichnung
local function finish()
raceActive = false
print("Sie haben in " .. timePassed .. " abgeschlossen")
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("Versuchen Sie 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)
-- Verfolgt die Rennzeit, während das Rennen aktiv ist. Muss am Ende des Skripts stehen.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end