中级教程

消失陷阱

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

致命熔岩 中,您学习了如何根据用户行为触发代码。本教程将向您展示如何制作一个平台,当用户踩上去时它会消失。

设置

如果您遵循了 致命熔岩,您可以将消失平台放置在用户无法跳过的熔岩地面上方。

  1. 插入一个部件并将其移动到您的世界中。将其命名为 FadingPlatform

  2. 调整大小,以便用户可以跳上去。

  3. 确保它是 固定的

  4. 在部件中插入一个 脚本,将其重命名为 FadeOnTouch,并删除默认代码。

  5. 为平台创建一个变量,并创建一个与平台的 Touched 事件连接的空函数。

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

使平台消失

让平台瞬间消失一点乐趣都没有,因为用户会发现很难跨越这个间隙。相反,平台应该在用户掉下去之前 逐渐消失,以给他们一个跳下去的机会。

您可以改变 Transparency 属性并反复等待很短的时间来获得这个效果,但逐渐消失需要至少 10 次在 0 和 1 之间的变化。这将产生 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 函数中的代码。将 fade 函数的主体包裹在一个条件为 not isTouchedif 语句中。

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 语句内部,在平台开始消失之前将 isTouched 设置为 true
  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 是我们在美国及其他国家或地区的注册与未注册商标。