在 致命熔岩 中,你学会了根据用户行为触发代码的方法。本教程向您展示如何制作一个平台,当用户踩到它时会消失。
设置
如果你遵循了 致命熔岩,你可以将褪色平台放在用户无法跳过的熔岩地板上。
插入零件并将其移入你的世界中。命名为 FadingPlatform 。
将其缩放以便用户可以跳上它。
确保它是 锚定 的。
将 脚本 插入零件,重命名为 FadeOnTouch 并移除默认代验证码。
为平台创建一个变量和一个空函数,连接到平台的 Touched 事件。
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
淡化平台
平台在一瞬间消失将不会很有趣,因为用户将发现无法穿过差距。相反,平台应该在用户通过它之前 消失 ,给他们一个跳关闭的机会。
您可以更改 Transparency 属性并等待很短的时间反复获得此效果,但渐变需要至少在 0 和 1 之间进行 10 次更改。这是 20 行非常重复的代验证码。
这可以通过使用 for 循环来实现得更有效,该循环会重复地重复代码特定数量次。代码的每个循环都被称为 循环 。循环 A 由三个东西定义,用逗号分开:
- 控制变量 - 用于计数循环的变量。在这个例子中,它是count,起始值是 1。
- 结束值 - 循环停止所需的值。在这个例子中,它是 10。
- 步增量 (可选)-决定每个循环要添加到控制变量中的内容。如果被忽略,它默认为 1,因此在这个例子中是不必要的。
在 在触摸时褪色 :
在函数中,创建一个 for 循环,从 1 开始迭代 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)
当循环运行时,每次迭代增加 1 个计数。这意味着平台的 Transparency 每 0.1 秒会增加 0.1,1 秒后达到完全透明。
重出现
平台消失后,用户应该通过它掉落。平台还应在褪色后的几秒钟内返回 - 否则,用户将永远无法再次尝试跳跃,如果他们失败。CanCollide 属性控制用户是否可以通过零件掉落。
将平台的 CanCollide 属性设置为 false 在 for 循环后。
使用 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事件都会运行。这种行为在用户穿越褪色平台时会导致问题:函数会多次运行,每次重置循环。
为了代码正常运行,函数只应在用户第一次触摸平台时运行一次。确保一个行动只在一次触发时触发,而不是多次触发,被称为 减震 。
要减缓函数,一个 boolean 变量可以用来跟踪平台是否已被触碰。布林元素只能包含 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)
检查变量
如果声明可以用于仅在淡化函数中运行代码,如果 isTouched 缓冲变量为 false,则可以使用。将渐变函数的体积包装在 if 声明中,条件为 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 thenendif isTouched == false thenendif isTouched == nil thenend
切换缓冲
目前,fade 函数中的代码始终会运行,因为 isTouched 为 false,而 not 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)