在 入門程式實作 Part.1 死亡岩漿 課程中,你了解到每次玩家的身體零件與其他零件接觸時都會發生 Touched 事件。當玩家跑過消失中的平台時會產生一個問題:該函數將運行多次,而每次都會重置循環
為了使程式碼正常工作,該函數應該只在玩家第一次接觸平台時運行一次。確保一個動作只被觸發一次,除非必要時才會被多次觸發,這就稱為 debouncing
為了讓函式具備 debounce ,一個布林變數能用來追蹤平台是否已經被碰到了,而布林則意味著值只有兩種可能: true 和 false
isTouched
,設其值為 false-- FadeOnTouch.lua
local platform = script.Parent
local isTouched = false --儲存是否已被碰過
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
wait(0.1)
end
platform.CanCollide = false
wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)
if 條件式能用來確保 fade 函式只有在 isTouched
debouncing 變數為 false 時才會執行
not isTouched
-- FadeOnTouch.lua
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then -- 當平台還沒有被碰過,就...
for count = 1, 10 do
platform.Transparency = count / 10
wait(0.1)
end
platform.CanCollide = false
wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
end
platform.Touched:Connect(fade)
Lua 的 not 運算子會反轉它後面的任何值。也就是說,原本是 false 的值會變成 true ,反之則變成 false。下面兩種例子的寫法都是相同的
if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
end