控制結構可以有多個條件。關鍵字 else 和 elseif 可以創建額外的場景,以在多個條件下發生。語法看起來像:
顯示 else 和其他語法
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
在此項目中,else 和 elseif 用於代碼一個 parkour 賽道,跑者根據他們的完成時間獲得獎勵。
編寫多個條件
為此項目,您可以為每個獎牌寫寫獨特的 if 句,但這需要花很多時間。 例個體、實例,您可以使用下面的假代碼。
所有 if 句
if finishTime < 5 then-- 獲得黃金獎牌endif finishTime >= 5 and <= 10 then-- 獲得銀牌endif finishTime > 10 and <= 15 then-- 獲得一枚銅牌end
這個更容易讀取和更有效率的方法是使用單一 if 句子並使用關鍵字 elseif 提供 alternative 條件來測試是否要檢查以前的條件是否為真。
使用 else 和其他
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("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)播放測試並確認 finish() 是否會在您碰觸到達成線時呼出。
防止重複結束
現在,當玩家觸摸到達成線時, finish() 會持續呼叫,直到玩家觸摸到零件。
使用 Boolean ,變量存儲是否為真或是否為假,以確保 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("touched the finish line")raceActive = falseend玩測您的遊戲,以確認您只會看到您的測試列印說明一次。
保留時間軌跡
像 if 語句,則 while 也可以使用條件來確認它是否應該執行。要時間玩家,請使用使用 while 的 timer,這只會在 raceActive Boolean 是真的時才會執行。
在指令碼的底部,輸入 while raceActive == true do。按Enter自動完成並添加end。
finishLine.Touched:Connect(partTouched)while raceActive == true doend要調整玩家的時間,在循環中,每秒鐘增加 1 到 timePassed 變量。包括打印語句來測試您的工作。
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)end播放遊戲,並確認您在輸出窗口中顯示的每一秒。
獎勵玩家獎牌
最後,使用 if 句與多個條件來給玩家一個不同的獎牌,這取決於他們的履約。使用 if 句和兩個 else 句來檢查玩家的完成時間,並給他們正確的獎牌。
要確認每個獎牌可以獲得,請使用列印聲明。
local function finish()raceActive = falseprint("You finished in " .. timePassed)end要獲得黃金獎牌,請在 timePassed 與所需的完成時間進行比較。這個範例檢查玩家的時間是否少於或等於 10 秒。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endend測試並確認黃金獎牌可以被授予。
增加額外條件
你現在已經測試了金牌,並且使用 elseif 關鍵字來測試其他牌子。
對於銀牌,請使用 elseif 和下一個所需的時間範圍。在此範例中,範圍是大於 10 秒,但小於或等於 20 秒。
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!")endend使用相同的模板為銅牌。 檢查您的代碼使用下面的範例。
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!")endend銅和銀獎牌測試。
排障提示
如果您看不到銀和銅屬性的金屬出現,請從以下一項中嘗試。
- 每個 elseif 應該有一個 then 在它的狀態後。
- 在 partTouched() 中,確認 if 句子的第二個條件使用 ==,像在 raceActive == true 中。
- 檢查每個 elseif 是否在範圍內。每個 elseif 條件必須在 if/then 句子的第一行和最後一行之間。
添加其他條件
如果玩家沒有獲得任何獎牌,你應該勵勵他們再試一次。在這個情況下,你可以使用 else 說明,這會在 沒有其他條件 的情況下執行,以顯示給他們一個訊息。
在最後一個 elseif 下和最上一個 end 之上,開始新行並輸入 else。1> 不要1> 添加,然後使用 print 指令提示他們再試一次。
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. 玩測試以查看其他訊息。
摘要
控制結構可以有多個場景。 使用 if 語式設置初始語句以檢查,然後按需要添加 elseif 多個 else 條件。 最後,使用 else 來狀態,如果所有指定條件為錯誤,將發生什麼事情。
從上方開始,所有條件將被檢查,只有第一個真正的條件才會執行代碼。剩下的條件將不被檢查,也不會執行代碼。
完成項目後,您可以擴展指令碼以在幾種額外方式添加新元素。
- 添加代碼,讓玩家重複競賽,觸摸起始線當他們完成時。
- 設計一個顯示時間的方法。 您可以使用表面使用者GUI顯示時間,例如在 創建時間橋樑教學 中。
Completed script
local timePassed = 0
local finishLine = script.Parent
-- 用於防止賽事結束時重複 fin() 和 timer
local raceActive = true
-- 跑步時玩家觸碰終點線,並且顯示獎勵
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
-- 檢查玩家是否觸摸零件,當競速啟用時
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