多個條件

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

控制結構可以有多個條件。關鍵字 elseelseif 可以創建額外的場景,以在多個條件下發生。語法看起來像:

顯示 else 和其他語法

if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end

在此項目中,elseelseif 用於代碼一個 parkour 賽道,跑者根據他們的完成時間獲得獎勵。

編寫多個條件

為此項目,您可以為每個獎牌寫寫獨特的 if 句,但這需要花很多時間。 例個體、實例,您可以使用下面的假代碼。

所有 if 句

if finishTime < 5 then
-- 獲得黃金獎牌
end
if finishTime >= 5 and <= 10 then
-- 獲得銀牌
end
if 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 句子執行時,它會從上方開始並僅對找到的 第一個 真條件執行代碼。

設置賽道

從放置課程開始點和終點線開始,並創建一個指令碼來定時獎勵玩家並獲得不同的獎牌。

  1. 建立名為 FinishLine 的錨定零件。為了提高測試速度,請將開始和結束放置在一起。你可以在完成腳指令碼後移動錨定線。

    完成零件
    整個課程
  2. 在 FinishLine 中,插入名為 RaceManager 的脚本。然後,在變更線上添加一個變數來儲存比賽開始以來的秒數,並在另一個變數上引用 FinishLine。


    local finishLine = script.Parent
    local timePassed = 0
  3. 建立名為 finish() 的函數。


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. 為自擁有:

    • partTouched() 這個名為 finish() 的函數上執行,當玩家碰到它。
    • 連接終端線部分到 partTouched()
    • 與下面的範例比較。

    local function finish()
    print("touched the finish line")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. 播放測試並確認 finish() 是否會在您碰觸到達成線時呼出。

防止重複結束

現在,當玩家觸摸到達成線時, finish() 會持續呼叫,直到玩家觸摸到零件。

使用 Boolean ,變量存儲是否為真或是否為假,以確保 finish() 只會呼叫一次。

  1. 建立名為 raceActive 的新變數,並將其設置為 true


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- 跑步時玩家觸摸到終點線任何部分
    local function finish()
  2. 在 if 條件中加入第二個條件來檢查 raceActive 是否真正存在,然後才能召喚 finish()


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. 若要停止 finish() 再次呼叫,請將 raceActive 設置為 false


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. 玩測您的遊戲,以確認您只會看到您的測試列印說明一次。

保留時間軌跡

像 if 語句,則 while 也可以使用條件來確認它是否應該執行。要時間玩家,請使用使用 while 的 timer,這只會在 raceActive Boolean 是真的時才會執行。

  1. 在指令碼的底部,輸入 while raceActive == true do。按Enter自動完成並添加end


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. 要調整玩家的時間,在循環中,每秒鐘增加 1 到 timePassed 變量。包括打印語句來測試您的工作。


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. 播放遊戲,並確認您在輸出窗口中顯示的每一秒。

獎勵玩家獎牌

最後,使用 if 句與多個條件來給玩家一個不同的獎牌,這取決於他們的履約。使用 if 句和兩個 else 句來檢查玩家的完成時間,並給他們正確的獎牌。

  1. 要確認每個獎牌可以獲得,請使用列印聲明。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. 要獲得黃金獎牌,請在 timePassed 與所需的完成時間進行比較。這個範例檢查玩家的時間是否少於或等於 10 秒。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. 測試並確認黃金獎牌可以被授予。

增加額外條件

你現在已經測試了金牌,並且使用 elseif 關鍵字來測試其他牌子。

  1. 對於銀牌,請使用 elseif 和下一個所需的時間範圍。在此範例中,範圍是大於 10 秒,但小於或等於 20 秒。


    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!")
    end
    end
  2. 使用相同的模板為銅牌。 檢查您的代碼使用下面的範例。


    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!")
    end
    end
  3. 銅和銀獎牌測試。

排障提示

如果您看不到銀和銅屬性的金屬出現,請從以下一項中嘗試。

  • 每個 elseif 應該有一個 then 在它的狀態後。
  • partTouched() 中,確認 if 句子的第二個條件使用 ==,像在 raceActive == true 中。
  • 檢查每個 elseif 是否在範圍內。每個 elseif 條件必須在 if/then 句子的第一行和最後一行之間。

添加其他條件

如果玩家沒有獲得任何獎牌,你應該勵勵他們再試一次。在這個情況下,你可以使用 else 說明,這會在 沒有其他條件 的情況下執行,以顯示給他們一個訊息。

  1. 在最後一個 elseif 下和最上一個 end 之上,開始新行並輸入 else。1> 不要1> 添加,然後使用 print 指令提示他們再試一次。


    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

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