在 致命熔岩 中,您學會了如何根據用戶行為觸發代碼。本教程將向您展示如何製作一個當用戶踩上去時會逐漸消失的平台。
設置
如果您遵循了 致命熔岩,您可以將消失平台放置在用戶無法跳過的熔岩地面上方。
插入一個部件並將其移動到您的世界中。將其命名為 FadingPlatform。
調整大小,以便用戶可以跳上去。
確保它是 固定的。

在部件中插入一個 腳本,將其重命名為 FadeOnTouch,並刪除默認代碼。

為平台創建一個變量,並創建一個與平台的 Touched 事件連接的空函數。
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
使平台消失
讓平台瞬間消失會非常無趣,因為用戶會發現無法跨越這個空隙。相反,平台應該在用戶掉下去之前 逐漸消失,以給他們一個跳下去的機會。
您可以不斷改變 Transparency 屬性並等待非常短的時間來獲得這個效果,但逐漸消失需要至少 10 次在 0 和 1 之間的變化。這樣會產生 20 行非常重複的代碼。
這可以通過使用 for 循環更有效地實現,該循環會重複特定次數的代碼。每次循環的代碼稱為 迭代。for 循環由三個部分定義,並用逗號分隔:

- 控制變量 - 創建並用於計數循環的變量。在這個例子中,它是 count,起始值為 1。
- 結束值 - 循環停止的值。在這個例子中,它是 10。
- 步進增量可選- 確定每次循環要添加到控制變量的值。如果省略,默認為 1,因此在這個例子中是多餘的。
在 FadeOnTouch 中:
在函數中,創建一個從 1 開始的 for 循環,迭代 10 次。
在 for 循環內,將 Transparency 屬性設置為控制變量除以 10。
使用 task.wait() 函數調用等待時間 0.1。
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
當循環運行時,count 在每次迭代中增加 1。這意味著平台的 Transparency 每 0.1 秒增加 0.1,並在 1 秒後達到完全透明。
重新出現
在平台消失後,用戶應該會掉下去。平台應該在消失幾秒後重新出現,否則如果用戶失敗,他們將永遠無法再次嘗試跳躍。CanCollide 屬性控制用戶是否可以穿過一個部件。
在 for 循環後將平台的 CanCollide 屬性設置為 false。
使用 task.wait() 函數等待幾秒鐘。
將 CanCollide 屬性設置回 true。
將 Transparency 屬性設置回 0。
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endplatform.CanCollide = falsetask.wait(3)platform.CanCollide = trueplatform.Transparency = 0endplatform.Touched:Connect(fade)
防抖變量
在 致命熔岩 中,您學會了 Touched 事件在用戶的身體部位與部件接觸時每次都會運行。這種行為在用戶跑過消失平台時會造成問題:函數將多次運行,每次都重置循環。
為了使代碼正常工作,函數應該僅在用戶第一次觸摸平台時運行一次。確保某個動作僅在本應多次觸發時觸發一次被稱為 防抖。
要防抖一個函數,可以使用一個 布林值 變量來跟踪平台是否已經被觸摸。布林值只能包含 true 和 false 值。創建一個名為 isTouched 的變量並將其設置為 false。
local platform = script.Parent
local isTouched = false
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)檢查變量
可以使用 if 語句僅在 isTouched 防抖變量為 false 時運行 fade 函數中的代碼。將 fade 函數的主體包裹在一個 if 語句中,條件為 not isTouched。
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
end
platform.Touched:Connect(fade)Luau 的 not 運算符會反轉其後的值。在條件語句中,這意味著第一個 if 語句的行為與後面的語句相同。
if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
end切換防抖
目前,fade 函數中的代碼將始終運行,因為 isTouched 為 false,not isTouched 評估為 true。要完成防抖例程,您需要在兩個地方切換變量的值。
- 在 if 語句內部,將 isTouched 設置為 true,在平台開始消失之前。
- 在平台重新出現後將其設置回 false。
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)就這樣!現在測試您的代碼,您應該會發現當用戶跳上去時平台會消失,幾秒鐘後又會重新出現。
您可以在更寬的空隙中複製這個平台,以創建一個具有挑戰性的障礙,並改變它們消失的速度以平衡難度。
最終代碼
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)