在 致命熔岩 中,您学习了如何根据用户行为触发代码。本教程将向您展示如何制作一个平台,当用户踩上去时它会消失。
设置
如果您遵循了 致命熔岩,您可以将消失平台放置在用户无法跳过的熔岩地面上方。
插入一个部件并将其移动到您的世界中。将其命名为 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 函数的主体包裹在一个条件为 not isTouched 的 if 语句中。
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)