淡化陷阱

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

致命熔岩 中,你學會了如何根據使用者行為觸發基於代碼的操作。本教學向您展示如何製作一個平台,當使用者踩到它時會消失。

設定

如果您遵循 致命熔岩,您可以將褪色平台放置在用戶無法跳過的熔岩地板上。

  1. 插入零件並將其移入你的世界中。命名為 FadingPlatform

  2. 縮小以便用戶可以跳上它。

  3. 確保它是 錨定 的。

  4. 腳本 插入零件中,重命名為 FadeOnTouch 並移除預設代碼。

  5. 為平台創建一個變量和一個空函數連接到平台的 Touched 事件。


    local platform = script.Parent
    local function fade()
    end
    platform.Touched:Connect(fade)

淡化平台

讓平台在一瞬間消失將不會是一件有趣的事情,因為使用者將無法穿過差距。相反,平台應該 褪色 ,在使用者通過它時給他們跳關閉的機會。

您可以更改 Transparency 屬性並等待很短的時間反覆獲得此效果,但漸進式淡化將需要至少在 0 和 1 之間進行 10 次變更。這是 20 行非常重複的代碼。

這可以使用一個 for 循環來實現得更有效,該循環會重複執行代碼特定數量的次數。每個代碼循環都被稱為 循環 。循環 A 定義了三個東西,用逗號分開:

  • 控制變量 - 創建並用於計數循環的變量。在這個例子中,它是 count ,起始值是 1。
  • 結束值 - 循環停止所需的值。在這個例子中,它是 10。
  • 步增量 (可選)-決定每個循環要添加到控制變量的內容。如果沒有留出,它會默認為 1,因此在這個例子中是不需要的。

褪色在觸摸 :

  1. 在功能中,創建一個 for 循環,從 1 開始迭代 10 次。

  2. 在 for 循環內,將 Transparency 屬性設為控制變量除以 10

  3. 呼叫 task.wait() 函數以時間 0.1


    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    end
    platform.Touched:Connect(fade)

當迴圈運行時,每次迭代增加 1 個計數。這意味著平台的 Transparency 將每 0.1 秒增加 0.1,1 秒後達到完全透明。

重新出現

平台消失之後,使用者應該通過它掉落。平台也應在消失幾秒鐘後回來 - 否則,用戶將永遠無法再試跳躍,如果他們失敗。CanCollide 屬性控制用戶是否能通過零件掉落。

  1. 將平台的 CanCollide 屬性設為 false 之後的 for 循環。

  2. 使用 task.wait() 功能等待幾秒鐘。

  3. CanCollide 屬性設為 true

  4. Transparency 屬性設為 0


    local platform = script.Parent
    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)

減速變量

致命熔岩 中,你學到了每次使用者的身體部位接觸到部分時,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 then
end
if isTouched == false then
end
if isTouched == nil then
end

切換抑制器

目前,在 fade 函數中的代碼會永遠運行,因為 isTouched 是否定的,而 not isTouched 評價為真。要完成減速程序,你需要在兩個地方切換變量的值。

  1. 在平台開始褪色之前,將 isTouched 設置為 true 內的 if 聲明,以開始褪色過程。
  2. 一旦平台重新出現,將其設置回 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)