這個項目是另一個在實用方面使用循環的例子。對於這個橋樑,玩家將觸碰按鈕以在它消失之前將橋變成可行走的時間有限。要創建計時器並將剩餘時間顯示給玩家,你會使用循環。
設定項目
這個橋樑可以包含在任何以運動為基礎的挑戰項目中,例如跑酷。
創建零件
尋找一個地方來建造橋樑,例如河流或在障礙賽中的大間隙。創建三個 錨定 部分,如下所示。
- 計時器顯示
- 橋樑
- 按鈕橋
當未使用時,橋會半透明。若要如此做,請選擇 橋 並變更其屬性。
- 透明度 = 0.8
- 可否碰撞 = 否
創建計時器顯示
當穿過橋時,玩家需要看看橋樑消失前還剩多少秒。顯示圖像或文字的一種方法是將一個名為「外觀 GUI」的對象添加到零件上。 表面使用者介面 也可用於創建遊戲內標誌、自訂生命條和庫存系統。本教學會快速通過此過程,但更多資訊可以在 教學 部分找到。
選擇定時顯示,然後添加 SurfaceGui 。然後,父級到 Surface Gui 添加 文字標籤 。
選擇面板GUI。在屬性中,進行以下變更:
- 變更 面 以便您可以看到玩家正在查看的時間器前方的文字標籤。
選擇文字標籤。在屬性中,進行以下變更:
- 將 尺寸 設為 {1, 0},{1, 0}。
- 將 文字縮放 設為真實。
- 將 文字 設為空白。文字將使用腳指令碼更新。
設定腳指令碼
現在計時器已位空間,創建一個腳本來控制橋並向玩家顯示倒數數字。
在橋樑部分中,添加一個名為 TimedBridge 的新腳本。在該指令碼中,創建以下變量。
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- 橋樑會保持多久的穩定local timerDuration = 5
編寫觸摸互動代碼
若要使用橋樑,您將需要創建兩個功能。一個功能將使橋梁可行走並顯示計時器。另一個功能會聆聽玩家是否觸碰啟用橋樑的按鈕。
創建一個新函數名為 startTimer() 內含打印聲明的新功能。你將使用打印聲明來測試你的代碼。
local timerDuration = 5local function startTimer()print("Countdown started")end編寫名為 buttonPressed() 的功能來檢查是否有人形碰觸按鈕。函數應接受 partTouched 參數,然後在那部分偵測到人形時有一個空 if 聲明。
local function startTimer()print("Countdown started")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendend要啟動計時器,在 if 聲明中,呼叫 startTimer() 函數。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endend在 buttonPressed() 結束之前,將 buttonPressed() 功能連接到按鈕的 Touched 事件。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)執行項目。觸摸零件並查看輸出窗口,查看打印聲明。
排除故障提示
在這個時候,如果橋樑沒有按照預期的方式運作,請嘗試以下方法之一。 問題 : 錯誤訊息說明: "... is not a valid member of workspace" .
在 TimedBridge 腳指令碼中,檢查所有零件是否與在探索器中看到的一樣正確地寫入。 問題 : 無法看到零件。
確保三個部分都被錨定。
檢查橋的透明度屬性。
創建計時器
每當玩家踏上橋時,startTimer() 會使橋變得可行走,並啟動計時器。一旦計時器達到 0,橋將變得不可行走,讓任何不夠快的人跌落下去。
讓橋能走動
啟動先,腳本需要使橋樑堅固或可碰撞,然後開始計時器,直到變得不可行走為止。
為了讓橋能走動,在 startTimer() 中,將橋的透明性屬性變更為 0 (不透明) 和可碰撞屬性變更為真。
local function startTimer()-- 使橋樑可見且可行走bridge.Transparency = 0bridge.CanCollide = trueend要創建一個倒數計時器,請使用以下值創建一個 for 循環。
- 控制變量 :命名為count,設為timerDuration。
- 結束 :0
- 增量 : -1
local function startTimer()-- 使橋樑可見且可行走bridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendend要向玩家顯示計時器,請將 timerText 中的文字變更為輸入 timerText.Text = count 即可顯示計數。每次循環過程通過一次循環,它會向玩家顯示計時器中的下一個數字。
for count = timerDuration, 0, -1 dotimerText.Text = countend使用 task.wait 功能來讓 for 循環僅一次每秒運行。
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end執行遊戲。當您觸碰按鈕時,橋應出現,然後計時器開啟動,然後完成。
防止橋樑重新啟動
注意,如果你在按鈕上移動,定時器將會持續重新啟動。
這是因為每次您觸碰按鈕時,都會呼叫 for 循環,並從一開始就開始 for 循環。為了防止定時器不斷重新啟動,您需要添加一個 boolean,一種變量類型,來控制是否允許 startTimer() 再次呼叫。 布林 以相同的方式寫入其他變量,但不使用數字或字串,只能設為真或假。在這種情況下,腳本會使用布林來檢查是否需要在啟動它之前檢查計時器是否正在運行。
在你的指令碼本頂部,在你的變量下,創建一個名為 timerActive 的變量,並將其設為 false 因為沒有人按下按鈕。
local timerDuration = 5local timerActive = falselocal function startTimer()為了確保計時器只在 timerActive 否啟用時才開始運行,請在 buttonPressed() 中添加第二個條件到 if 聲明。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endend為了防止定時器到期前再次運行,將 boolean 設置為真。
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true在 startTimer() 函數中, 在 for 循環之後,將橋的透明度變更為 0.8 並將 CanCollide 設為 false,將橋重新設置為原始狀態。
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- 對於從計時器持續時間計數的循環for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- 讓橋不能走路bridge.Transparency = 0.8bridge.CanCollide = falseend最後要重設橋樑的一件事是將 timerText 變更為原本的空字串,如何變更:然後,將 timerActive 布林設為假。
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = false進行遊戲測試和檢查,以確保橋樑可以多次使用。
完成定時橋腳指令碼
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("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- 對於從計時器持續時間計數的循環
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("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)
總結
迴圈可以與不同的互動方式結合,創建有趣的遊戲時刻。在這個教學中,使用倒數計時的 for 循環創建了一個時間橋。在倒數期間,玩家有一個有限的時間來通過。