入門程式實作 Part.1 死亡岩漿 課程中,你了解到每次玩家的身體零件與其他零件接觸時都會發生 Touched 事件。當玩家跑過消失中的平台時會產生一個問題:該函數將運行多次,而每次都會重置循環

為了使程式碼正常工作,該函數應該只在玩家第一次接觸平台時運行一次。確保一個動作只被觸發一次,除非必要時才會被多次觸發,這就稱為 debouncing

Debounce 變數

為了讓函式具備 debounce ,一個布林變數能用來追蹤平台是否已經被碰到了,而布林則意味著值只有兩種可能: true 和 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 時才會執行

-- 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)

相反運算子(not)

Lua 的 not 運算子會反轉它後面的任何值。也就是說,原本是 false 的值會變成 true ,反之則變成 false。下面兩種例子的寫法都是相同的

if not isTouched then
 
end
if isTouched == false then
 
end
 
if isTouched == nil then
 
end

開關Debouncing(Toggling the Debounce)