多重條件

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

控制結構可以有多個條件。關鍵字 elseelseif 可以為其他條件創建額外的場景。其語法如下:

顯示 elseif 和 else 的語法

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

在這個專案中,使用 elseelseif 來編碼一個跑酷賽道,跑者根據完成時間獲得獎勵。

編碼多個條件

對於這個專案,你可以為每個獎牌寫獨特的 if 條件來授予玩家獎勵,但這需要花費很多時間。舉例來說,下面的虛擬代碼。

所有 if 條件

if finishTime < 5 then
-- 獲得金牌
end
if finishTime >= 5 and <= 10 then
-- 獲得銀牌
end
if finishTime > 10 and <= 15 then
-- 獲得銅牌
end

一個更具可讀性和效率的編碼方式是使用單一的 if 條件,並使用 elseif 關鍵字以提供替代條件來檢測先前的條件是否不為真。

使用 elseif 和 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("觸碰了終點線")
    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() 重複呼叫

目前,每當玩家觸碰終點線時,只要玩家觸碰這個部件,finish() 就會不斷被調用。

使用 布林值,一個存儲真或假的變數,以確保 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("觸碰了終點線")
    raceActive = false
    end
  4. 進行遊戲測試以檢查你的測試打印語句是否只顯示一次。

計時

像 if 語句一樣,while 循環也可以使用條件來檢查是否應運行。要計時玩家,使用 while true do 循環在 raceActive 布林值為真時運行。

  1. 在腳本的底部,鍵入 while raceActive == true do。按 Enter 自動完成並添加 end


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. 在循環中,將 timePassed 變數每秒加 1,以計時玩家。包括打印語句來測試你的工作。


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. 進行遊戲測試,檢查在 輸出 窗口中是否顯示每一秒。

授予玩家獎牌

最後,使用一個 if 語句和多個條件來根據玩家的表現授予不同的獎牌。使用 if 語句和兩個 elseif 語句來檢查玩家的完成時間並授予正確的獎牌。

  1. 為了確認每個獎牌可以頒發,使用打印語句。


    local function finish()
    raceActive = false
    print("你完成了 " .. timePassed)
    end
  2. 要授予金牌,編寫一個 if 語句,將 timePassed 與期望的完成時間進行比較。這個例子檢查玩家的時間是否小於或等於 10 秒。


    local function finish()
    raceActive = false
    print("你完成了 " .. timePassed)
    if timePassed <= 10 then
    print("你獲得金牌!")
    end
    end
  3. 進行遊戲測試以確認金牌可以頒發。

添加額外條件

現在你已經測試了金牌,使用 elseif 關鍵字為其他獎牌編碼條件。

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


    local function finish()
    raceActive = false
    print("你完成了 " .. timePassed)
    if timePassed <= 10 then
    print("你獲得金牌!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("你獲得銀牌!")
    end
    end
  2. 對於銅牌使用相同的模式。將你的代碼與下面的例子進行檢查。


    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("你獲得銅牌!")
    end
    end
  3. 進行遊戲測試以檢查銀牌和銅牌的頒發。

疑難排解提示

如果你沒有看到銀牌和銅牌出現,請嘗試以下方法。

  • 每個 elseif 在其條件後都應有一個 then。
  • partTouched() 中,確保 if 語句的第二個條件使用 ==,如 raceActive == true
  • 確保每個 elseif 在範圍內。每個 elseif 條件必須在 if/then 語句的第一行和最後一個 end 之間。

添加 else 條件

如果玩家沒有獲得任何獎牌,你應該鼓勵他們嘗試再一次。在這種情況下,你可以使用 else 語句,當 沒有其他 條件為真時運行,以顯示他們一條消息。

  1. 在最後一個 elseif 下面和 end 上方,開始新行並鍵入 else不要 添加 then。在 else 下面,使用打印語句來提示他們再次嘗試。


    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
  2. 進行遊戲測試以查看 else 消息。

總結

控制結構可以有多種情景。使用 if 語句設置最初的檢查語句,然後根據需要添加任意多的 elseif 條件。最後,使用 else 指定如果所有給定條件為假時應發生什麼。

從上方開始,將檢查所有條件,僅運行第一個為真的條件的代碼。其餘條件將不被檢查,也不會運行它們的代碼。

完成專案後,您可以以幾種額外的方式擴展腳本,添加新元素。

  • 添加代碼以便玩家在完成後觸碰起點線時可以重複比賽。
  • 設計一種在比賽過程中顯示時間的方法。你可以使用 Surface 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
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。