中级教程

渐隐陷阱

*此内容使用人工智能(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循环可以更有效地实现这个效果,循环代码的次数是具体的。每次循环称为一个迭代。for循环由三部分组成,逗号分隔:

  • 控制变量 - 用于计数循环的变量。在本例中,它为count,起始值为1。
  • 结束值 - 跳出循环所需达到的值。在本例中,它为10。
  • 步进增量(可选) - 决定每次循环时控制变量增加多少。如果省略,默认值为1,因此在本例中没有必要。

FadeOnTouch中:

  1. 在函数中创建一个从1开始的for循环,迭代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)

当循环运行时,count会在每次迭代中增加1。这意味着平台的Transparency将每隔0.1秒增加0.1,1秒后将达到完全透明。

重新出现

在平台消失之后,用户应该会掉下去。平台应该在消失几秒后再次出现,否则用户在失败后将永远无法再尝试跳跃。CanCollide属性控制用户是否能够穿过某个部分。

  1. 在for循环后将平台的CanCollide属性设置为false

  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事件都会运行。当用户在渐隐平台上奔跑时,这种行为会导致问题:函数会多次运行,每次都重置循环。

为了让代码正常工作,函数应该在用户第一次接触平台时只运行一次。确保某个动作在本该执行多次的情况下只被触发一次被称为防抖

要防抖一个函数,可以使用一个布尔值变量来跟踪平台是否已经被触碰过。布尔值只能包含truefalse。创建一个名为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函数中的代码。用if语句将fade函数的主体包裹起来,条件为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为false,而not isTouched为true。要完成防抖程序,你需要在两个地方切换变量的值。

  1. if语句内,在平台开始渐变之前设置isTouchedtrue
  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)
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。