在 致命熔岩 中,你學會了如何根據使用者行為觸發基於代碼的操作。本教學向您展示如何製作一個平台,當使用者踩到它時會消失。
設定
如果您遵循 致命熔岩,您可以將褪色平台放置在用戶無法跳過的熔岩地板上。
插入零件並將其移入你的世界中。命名為 FadingPlatform 。
縮小以便用戶可以跳上它。
確保它是 錨定 的。
將 腳本 插入零件中,重命名為 FadeOnTouch 並移除預設代碼。
為平台創建一個變量和一個空函數連接到平台的 Touched 事件。
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
淡化平台
讓平台在一瞬間消失將不會是一件有趣的事情,因為使用者將無法穿過差距。相反,平台應該 褪色 ,在使用者通過它時給他們跳關閉的機會。
您可以更改 Transparency 屬性並等待很短的時間反覆獲得此效果,但漸進式淡化將需要至少在 0 和 1 之間進行 10 次變更。這是 20 行非常重複的代碼。
這可以使用一個 for 循環來實現得更有效,該循環會重複執行代碼特定數量的次數。每個代碼循環都被稱為 循環 。循環 A 定義了三個東西,用逗號分開:
- 控制變量 - 創建並用於計數循環的變量。在這個例子中,它是 count ,起始值是 1。
- 結束值 - 循環停止所需的值。在這個例子中,它是 10。
- 步增量 (可選)-決定每個循環要添加到控制變量的內容。如果沒有留出,它會默認為 1,因此在這個例子中是不需要的。
在 褪色在觸摸 :
在功能中,創建一個 for 循環,從 1 開始迭代 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)
當迴圈運行時,每次迭代增加 1 個計數。這意味著平台的 Transparency 將每 0.1 秒增加 0.1,1 秒後達到完全透明。
重新出現
平台消失之後,使用者應該通過它掉落。平台也應在消失幾秒鐘後回來 - 否則,用戶將永遠無法再試跳躍,如果他們失敗。CanCollide 屬性控制用戶是否能通過零件掉落。
將平台的 CanCollide 屬性設為 false 之後的 for 循環。
使用 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會運行。這種行為會導致用戶在褪色平台上執行時發生問題:函數會多次運行,每次重置循環。
為了確保代碼正常運作,功能只應在使用者第一次觸碰平台時運行一次。確保一個行動僅在一次被觸發時才會被觸發,而不是多次被觸發,被稱為 延遲 。
若要減緩功能,boolean變量可用來記錄平台已經被觸碰的時間。布林只能包含 真實 和 假 值。創建一個變量叫做 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。用 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 thenendif isTouched == false thenendif isTouched == nil thenend
切換抑制器
目前,在 fade 函數中的代碼會永遠運行,因為 isTouched 是否定的,而 not isTouched 評價為真。要完成減速程序,你需要在兩個地方切換變量的值。
- 在平台開始褪色之前,將 isTouched 設置為 true 內的 if 聲明,以開始褪色過程。
- 一旦平台重新出現,將其設置回 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)