Strukturen können mehr als eine Bedingung haben. Die Schlüsselwörter else und elseif können zusätzliche Szenarien für das, was unter mehreren Bedingungen passieren soll, erstellen. Die Syntax sieht wie folgt aus:
Zeigt Syntax für wenn und sonst
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 kodieren, bei dem die Runner nach ihrem Endzeit-Verhältnis Belohnungen erhalten.
Mehrere Bedingungen kodieren
Für dieses Projekt könnte für jede Medaille eine einzigartige if-Anweisung für die Auszeichnung der Spieler geschrieben werden, aber das dauert viel Zeit. Nehmen Sie zum Instanzden folgenden immaginären Code.
Alle if-Anweisungen
if finishTime < 5 then-- Erhalte eine Goldmedailleendif finishTime >= 5 and <= 10 then-- Hol dir eine Silbermedailleendif finishTime > 10 and <= 15 then-- Bronze-Medailleend
Ein besser lesbares und effizienteres Code ist es, eine einzige if-Anweisung zu verwenden und das Schlüsselwort elseif zu verwenden, um alternative Bedingungen zu testen, wenn die vorherigen Bedingungen nicht wahr sind.
Verwendet else und anders
if finishTime < 5 then-- Erhalte eine Goldmedailleelseif finishTime >= 5 and <= 10 then-- Hol dir eine Silbermedailleelseif finishTime > 10 and <= 15 then-- Bronze-Medailleend
Wenn die if/ dann-Anweisung ausgeführt wird, startet sie oben und läuft nur den Code für die erste richtige Bedingung, die sie findet.
Den Rennenkurs einrichten
Beginnen Sie, indem Sie den Startpunkt des Kurses und die Ziellinie platzieren, und erstellen Sie dann ein Skript, um den Spieler zu zeitigen und verschiedene Medaillen zu vergeben.
Erstellen Sie ein verankertes Teil namens FinishLine. Um das Testen schneller zu machen, platzieren Sie den Start und das Ende nah beieinander. Sie können die Finishline nach dem Beenden des Skript, das. PL: die Skriptsbewegen.
In FinishLine fügen Sie ein Skript namens RaceManager ein. Dann fügen Sie eine Variable hinzu, um zu speichern, wie viele Sekunden seit dem Start des Rennens vergangen sind, und eine 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()endAuf deinem besitzen:
- Code eine Funktion namens partTouched() , die finish() läuft, wenn ein Spieler sie berührt.
- Verbinde das Ziellinien-Teil mit partTouched() .
- Vergleichen Sie Ihren 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 das Spiel und stelle fest, dass finish() aufgerufen wird, wenn du die Ziellinie berührst.
Beenden Sie finish() Von der Wiederholung
Jetzt, wenn ein Spieler die Ziellinie berührt, wird finish() immer wieder aufgerufen, solange der Spieler den Teil berührt.
Verwende ein Boolean , eine Variable, die wahr oder falsch ist, 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-- Läuft jedes Mal, wenn der Spieler die Finish Line berührtlocal function finish()Fügen Sie einer zweiten Bedingung zu der if-Anweisung hinzu, um zu überprüfen, ob raceActive wahr ist, bevor Sie aufrufen finish() .
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("touched the finish line")raceActive = falseendSpielteste dein Spiel, um sicherzustellen, dass du nur deine Testprint-Erklärung einmal siehst.
Verfolgung der Zeit
Wie ein if- statement, kann ein while-Loop auch eine Bedingung verwenden, um zu sehen, ob er ausführensoll. Um den Spieler:inzu zeitigen, erstellen Sie einen Timer mit einer Bedingung, die nur ausgeführt wird, wenn der raceActive-Boolean wahr ist.
At the bottom of the Skript, das. PL: die Skripts, type while raceActive == true do. Press Enter to auto-complete and add the end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendUm die Spieler im Loop zu synchronisieren, fügen Sie 1 der timePassed Variable ein, sobald jede Sekunde. Inklusive eines Print-Statements, um deine Arbeit zu testen.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endSpielen Sie das Spiel und überprüfen Sie, dass Sie jede Sekunde im Ausgabe-Fenster angezeigt wird.
Spieler-Medaillen vergeben
Um das zu beenden, verwende ein if-Anweisung mit mehreren Bedingungen, um den Spielern einen anderen Preis-Medaille basierend auf ihrem Erfüllungzu vergeben. Verwende ein if-Anweisung und zwei if-Anweisungen, um die Fertigungszeit des Spieler:inzu überprüfen und ihnen die richtige Medaille zu vergeben.
Um jede Medaille zu vergeben, können Sie druckähnliche Anweisungen verwenden.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endUm eine Goldmedaille zu vergeben, kodieren Sie ein If- Statement, das timePassed mit der gewünschten Verarbeitungszeit vergleicht. Dieses Beispiel prüft, ob die Spielzeit weniger als oder gleich ist 10 Sekunden.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendTeste das Goldmedalien vergeben werden können und bestätige die Goldmedaille.
Zusätzliche Bedingungen hinzufügen
Jetzt, da du für die goldene Medaille getestet hast, Codes für die anderen Medaillen mit dem elseif-Schlüsselwort.
Für die silberne Medaille verwenden Sie elseif und die nächste gewünschte Zeitbereich. In diesem Beispiel ist der Bereich größer als 10 Sekunden, aber weniger als oder gleichgestellt mit 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!")endendVerwenden Sie das gleiche Muster für die Bronze-Medaille. Überprüfen Sie Ihren 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 für die silbernen und bronzenen Medaillen.
Troubleshooting-Tipps
Wenn Sie die silbernen und bronzenen Metalle nicht sehen, versuchen Sie es mit einem der folgenden.
- Jeder elseif sollte dann nach seiner Bedingung haben.
- In partTouched() , stellen Sie sicher, dass die zweite Bedingung der if-Anweisung == , wie in raceActive == true , verwendet.
- Überprüfen Sie, dass jedes elseif -</>료 ist in Reichweite. Jede elseif -Bedingung muss zwischen der ersten Zeile der if/then-Anweisung und dem letzten end liegen.
Else-Bedingung hinzufügen
Wenn der Spieler keine Medaillen verdient hat, solltest du ihn ermutigen, es erneut zu versuchen. In diesem Fall kannst du eine else-Erklärung verwenden, die ausgeführt wird, wenn keine anderen Bedingungen wahr sind, um ihm eine Nachricht anzuzeigen.
Unter dem letzten elseif und über dem end starten Sie eine neue Zeile und tippen Sie else . 1> Do not1> add then. Beneath else, verwenden Sie eine Print-Anweisung, 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. Playtest, um die andere Nachricht zu sehen.
Zusammenfassung
Kontrollstrukturen können mehr als ein Szenario haben. Verwenden Sie, wenn Anweisungen verwendet werden, um das ursprüngliche Anweisung zu überprüfen, und fügen Sie dann so viele elseif Bedingungen hinzu, wie notwendig. Schließlich verwenden Sie else, um zu bestätigen, was passieren sollte, wenn alle gegebenen Bedingungen falsch sind.
Startet von oben, werden alle Bedingungen überprüft, und nur die erste wahre Bedingung wird den Codesausführen. Die restlichen Bedingungen werden nicht überprüft und ihr Code wird auch nicht ausgeführt.
Nachdem du das Projekt abgeschlossen hast, kannst du auf das Skript expandieren, um neue Elemente in ein paar zusätzlichen Möglichkeiten 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. Sie können entweder die Zeit auf einem Teil mit einer grafische Benutzeroberflächeanzeigen, wie in dem Creating a Timed Bridge tutorial.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Wird verwendet, um das Ziel zu verlassen, wenn das Rennen vorbei ist
local raceActive = true
-- Wird ausgelöst, wenn der Spieler die Ziellinie berührt und ihnen 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
-- Prü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)
-- Beält die Rennzeit während der Runde aktiv. Muss am Skript-Bottom sein.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end