循環練習 - 創建一座計時橋

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

這個項目是使用 for 循環的一個實際例子。對於這座橋,玩家將觸摸一個按鈕,讓一座橋在有限的時間內可行走,然後橋會消失。要創建計時器並向玩家顯示剩餘時間,您將使用 for 循環。

設置項目

這座橋可以包含在任何有運動挑戰的 Roblox 項目中,例如 obby。

創建零件

  1. 找一個可以建造橋的地方,比如河流或 obby 中的大缺口。創建三個 固定 的零件,如下所示。

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. 當不活動時,橋將是半透明的。為此,選擇 Bridge 並更改其屬性。

    • Transparency = 0.8
    • CanCollide = False

創建計時器顯示

當玩家穿過橋時,將需要看到橋消失前剩下多少秒。顯示圖像或文本的一種方法是將一個名為 Surface GUI 的對象添加到一個零件上。Surface GUIs 也可以用來創建遊戲內標誌、自訂健康條和庫存系統。本教程將快速介紹這一點,但可以在 Tutorials 部分找到更多信息。

  1. 選擇 TimerDisplay 並添加一個 SurfaceGui。然後,將其作為 Surface Gui 的子對象,添加 TextLabel

  2. 選擇 Surface GUI。在屬性中,進行以下更改:

    • 更改 Face 以便您可以在計時器的前面看到文本標籤,玩家在那裡觀看。
  3. 選擇 TextLabel。在屬性中,進行以下更改:

    • Size 設置為 {1, 0},{1, 0}
    • TextScaled 設置為 true。
    • Text 設置為空白。文本將使用腳本進行更新。

設置腳本

現在計時器已就位,創建一個腳本來控制橋並向玩家顯示倒計時數字。

  1. 在 Bridge 部分,添加一個名為 TimedBridge 的新腳本。在該腳本中,創建以下變量。


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- 桥保持坚固的时间
    local timerDuration = 5

編寫觸控互動

要使用這座橋,您需要創建兩個函數。一個函數將使橋可行走並顯示計時器。另一個函數將用於監聽玩家是否觸摸啟動橋的按鈕。

  1. 創建一個名為 startTimer() 的新函數,並在其中放入一個 print 語句。您將使用 print 語句來測試您的代碼。


    local timerDuration = 5
    local function startTimer()
    print("倒計時開始")
    end
  2. 編寫一個名為 buttonPressed() 的函數來檢查是否有人體觸摸按鈕。該函數應接受一個參數 partTouched,然後在檢測到該部分中的 humanoid 時有一個空的 if 語句。


    local function startTimer()
    print("倒計時開始")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. 要啟動計時器,在 if 語句中調用 startTimer() 函數。


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. buttonPressed() 函數的末尾,將 buttonPressed() 函數連接到按鈕的 Touched 事件。


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. 運行項目。觸摸該部分,並在輸出窗口檢查以查看 print 語句。

故障排除提示

此時,如果橋的工作方式不如預期,請嘗試以下之一。

問題:顯示錯誤信息:"... is not a valid member of workspace"

  • 在 TimedBridge 腳本中,檢查所有零件的拼寫是否與在資源管理器中的顯示一致。

問題:無法看到這些零件。

  • 確保所有三個零件都已固定。
  • 檢查橋的 Transparency 屬性。

創建計時器

每當玩家站在橋上時,startTimer() 將使橋可行走並啟動計時器。一旦計時器達到 0,橋將變得不可行走,導致任何不夠快的人掉落。

使橋可行走

首先,腳本需要使橋堅固,即可碰撞,然後啟動計時器直到使其變為不可行走。

  1. 要使橋可行走,在 startTimer() 中,將橋的 Transparency 屬性更改為 0(不透明),將 CanCollide 屬性更改為 true。


    local function startTimer()
    -- 使橋可見且可行走
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. 要創建計時倒計時計時器,創建一個 for 循環,值如下。

    • 控制變量:命名為 count,設置為 timerDuration
    • 結束:0
    • 增量:-1

    local function startTimer()
    -- 使橋可見且可行走
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. 要向玩家顯示計時器,將 timerText 中的文本更改為顯示 count,方法是輸入 timerText.Text = count。每次 for 循環通過一個迭代時,它將顯示計時器中的下一個數字。


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. 使用 task.wait 函數讓 for 循環每次僅運行一次。


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. 運行體驗。當您觸摸按鈕時,橋應該出現,計時器將開始,然後完成。

防止橋重新啟動

但請注意,如果您在按鈕上四處移動,計時器將不斷重新啟動。

這是因為每次您觸摸按鈕時都會調用 for 循環並從頭開始。要防止計時器不斷重新啟動,您需要添加一個布林值,一種類型的變量,來控制是否可以再次調用 startTimer()

布林值 與其他變量的寫法相同,但它們只能設置為 true 或 false。在這種情況下,腳本將使用布林值檢查計時器當前是否正在運行,以決定是否啟動。

  1. 在您的腳本頂部,在變量下方創建一個名為 timerActive 的變量,並將其設置為 false,因為還沒有任何人按下按鈕。


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. 確保計時器僅在 timerActive 布林值為 false 時啟動,在 buttonPressed() 的 if 語句中添加第二個條件。


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. 為了使 startTimer() 在計時器運行之前不再運行,將布林值 timerActive 設置為 true。


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. startTimer() 函數中, for 循環之後,將橋恢復到其原始屬性,將橋的透明度更改為 0.8,將 CanCollide 設置為 false。


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- 倒數計時的 for 循環
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- 使橋不可行走
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. 最後一件要重置橋的事情是將 timerText 更改為空字符串,就像原來那樣。然後,將 timerActive 布林值設置為 false。


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. 測試遊玩,確保橋可以多次使用。

完整的計時橋腳本


local bridge = script.Parent
-- 在資源管理器中獲取按鈕
local button = workspace.ButtonBridge
-- 獲取顯示部分
local timerPart = workspace.TimerDisplay
-- 獲取顯示計時器的文本
local timerText = timerPart.SurfaceGui.TextLabel
-- 玩家必須穿過橋的時間
local timerDuration = 5
local timerActive = false
local function startTimer()
print("倒計時開始")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- 倒數計時的 for 循環
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- 使橋不可行走
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("部件被觸摸")
if humanoid and timerActive == false then
print("開始計時")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

總結

循環可以與不同的互動方式結合創造有趣的遊戲時刻。在本教程中,創建了一座用作倒計時的計時橋。在倒計時期間,玩家有有限的時間穿過橋。

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。