控制結構可以有多個條件。關鍵字 else 和 elseif 可以創建在多個條件下應該發生的額外情況。語法如下:
if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end在這個項目中,else 和 elseif 被用來編碼一個跑酷賽道,跑者根據他們的完成時間獲得獎勵。

編碼多重條件
對於這個項目,你可以為每個獎牌編寫一個獨特的 if 語句來獎勵玩家,但這需要很多時間。舉例來說,下面的虛構代碼。
if finishTime < 5 then
-- 獲得金牌
end
if finishTime >= 5 and <= 10 then
-- 獲得銀牌
end
if finishTime > 10 and <= 15 then
-- 獲得銅牌
end更可讀且高效的編碼方式是使用單個 if 語句,並使用關鍵字 elseif 提供替代條件,以測試前面的條件是否不成立。
if finishTime < 5 then
-- 獲得金牌
elseif finishTime >= 5 and <= 10 then
-- 獲得銀牌
elseif finishTime > 10 and <= 15 then
-- 獲得銅牌
end當 if/then 語句運行時,它將從上到下開始,並僅運行它找到的 第一個 真條件的代碼。
設置賽道
首先放置賽道的起點和終點,然後創建一個腳本來計時玩家並獎勵不同的獎牌。
創建一個名為 FinishLine 的固定部件。為了加快測試速度,將起點和終點放得靠近一些。你可以在完成腳本後移動終點。

終點部件 
整個賽道 在 FinishLine 中插入一個名為 RaceManager 的腳本。然後,添加一個變量來存儲自賽事開始以來經過的秒數,並添加第二個變量來引用 FinishLine。
local finishLine = script.Parentlocal timePassed = 0創建一個名為 finish() 的函數。
local timePassed = 0local finishLine = script.Parentlocal function finish()end自行完成:
- 編碼一個名為 partTouched() 的函數,當玩家觸碰它時運行 finish()。
- 將終點部件連接到 partTouched()。
- 將你的代碼與下面的示例進行比較。
local function finish()print("觸碰了終點")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)進行遊戲測試,檢查當你觸碰終點時 finish() 是否被調用。
防止 finish() 重複調用
現在,每當玩家觸碰終點時,finish() 會在玩家觸碰該部件時不斷被調用。
使用 布林值,一個存儲真或假的變量,以確保 finish() 只被調用一次。
創建一個名為 raceActive 的新變量並將其設置為 true。
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- 每當玩家觸碰終點部件時運行local function finish()在 if 語句中添加第二個條件,以檢查 raceActive 是否為真,然後再調用 finish()。
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endend為了防止 finish() 再次被調用,將 raceActive 設置為 false。
local function finish()print("觸碰了終點")raceActive = falseend進行遊戲測試,檢查你是否只看到一次測試打印語句。
計時
像 if 語句一樣,while 循環也可以使用條件來查看是否應該運行。要計時玩家,使用 while true do 循環創建一個計時器,該循環僅在 raceActive 布林值為真時運行。
在腳本的底部,輸入 while raceActive == true do。按 Enter 自動完成並添加 end。
finishLine.Touched:Connect(partTouched)while raceActive == true doend為了計時玩家,在循環中每秒將 timePassed 變量加 1。包括一個打印語句來測試你的工作。
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)end進行遊戲測試,檢查你是否在 輸出 窗口中看到每秒的顯示。
獎勵玩家獎牌
最後,使用一個 if 語句和多個條件來根據玩家的表現獎勵他們不同的獎牌。使用 if 語句和兩個 elseif 語句來檢查玩家的完成時間並獎勵他們正確的獎牌。
為了確認每個獎牌可以被授予,使用打印語句。
local function finish()raceActive = falseprint("你完成了 " .. timePassed)end為了獲得金牌,編碼一個 if 語句,將 timePassed 與所需的完成時間進行比較。這個示例檢查玩家的時間是否小於或等於 10 秒。
local function finish()raceActive = falseprint("你完成了 " .. timePassed)if timePassed <= 10 thenprint("你獲得了金牌!")endend進行遊戲測試並確認金牌可以被授予。
添加額外條件
現在你已經測試了金牌,使用 elseif 關鍵字編碼其他獎牌的條件。
對於銀牌,使用 elseif 和下一個所需的時間範圍。在這個示例中,範圍是大於 10 秒但小於或等於 20 秒。
local function finish()raceActive = falseprint("你完成了 " .. timePassed)if timePassed <= 10 thenprint("你獲得了金牌!")elseif timePassed > 10 and timePassed <= 20 thenprint("你獲得了銀牌!")endend對於銅牌使用相同的模式。用下面的示例檢查你的代碼。
local function finish()raceActive = falseprint("你完成了 " .. timePassed)if timePassed <= 10 thenprint("你獲得了金牌!")elseif timePassed > 10 and timePassed <= 20 thenprint("你獲得了銀牌!")elseif timePassed > 20 and timePassed <= 30 thenprint("你獲得了銅牌!")endend進行遊戲測試以檢查銀牌和銅牌。
故障排除提示
如果你沒有看到銀牌和銅牌出現,請嘗試以下方法之一。
- 每個 elseif 應在其條件後面有一個 then。
- 在 partTouched() 中,確保 if 語句的第二個條件使用 ==,如 raceActive == true。
- 檢查每個 elseif 是否在範圍內。每個 elseif 條件必須位於 if/then 語句的第一行和最後一個 end 之間。
添加 else 條件
如果玩家沒有獲得任何獎牌,你應該鼓勵他們再試一次。在這種情況下,你可以使用 else 語句,當 沒有其他 條件為真時運行,以向他們顯示一條消息。
在最後一個 elseif 下面和 end 之上,開始新的一行並輸入 else。不要 添加 then。在 else 下面,使用打印語句提示他們再試一次。
local function finish()raceActive = falseprint("你完成了 " .. timePassed)if timePassed <= 10 thenprint("你獲得了金牌!")elseif timePassed > 10 and timePassed <= 20 thenprint("你獲得了銀牌!")elseif timePassed > 20 and timePassed <= 30 thenprint("你獲得了銅牌!")elseprint("再試一次!")endend進行遊戲測試以查看 else 消息。
總結
控制結構可以有多個情況。使用 if 語句設置要檢查的初始語句,然後根據需要添加任意多的 elseif 條件。最後,使用 else 來說明如果所有給定條件都為假時應該發生什麼。
從上到下,所有條件將被檢查,只有第一個為真的條件將運行代碼。其餘條件將不會被檢查,也不會運行它們的代碼。
完成項目後,你可以擴展腳本以用幾種額外的方式添加新元素。
- 添加代碼,讓玩家在完成後通過觸碰起點來重複比賽。
- 設計一種在比賽中顯示時間的方式。你可以使用表面 GUI 在部件上顯示時間,就像在 創建計時橋教程 中一樣。
local timePassed = 0
local finishLine = script.Parent
-- 用於在比賽結束時防止 finish() 和計時器重複
local raceActive = true
-- 當玩家觸碰終點並顯示獎勵時運行
local function finish()
raceActive = false
print("你完成了 " .. timePassed)
if timePassed <= 10 then
print("你獲得了金牌!")
elseif timePassed > 10 and timePassed <= 20 then
print("你獲得了銀牌!")
elseif timePassed > 20 and timePassed <= 30 then
print("你獲得了銅牌!")
else
print("再試一次!")
end
end
-- 檢查玩家在比賽活動時是否觸碰部件
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)
-- 在比賽活動時跟踪比賽時間。需要在腳本底部。
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end