在Deadly Lava中,你学会了根据用户行为触发代码。此教程向你展示了如何创建一个平台,当用户踩到它时会逐渐消失。
设置
如果您跟随 致命熔岩,您可以将您的渐渐消失的平台放置在用户无法跳过的熔岩地板上。
插入零件并将其移入您的世界。命名为 FadingPlatform。
将其缩放,让用户可以跳上它。
确保它是 锚定 。
将 脚本 插入零件,将其重命名为 FadeOnTouch,并移除默认代验证码。
为平台创建一个变量,并连接平台的 Touched 事件。
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
平台渐变
在一秒内平台消失将不再是玩家所能接受的娱乐活动,因为用户将发现无法通过此间隙。相反,平台应该 消失 ,在用户通过它而给他们提供跳关闭的机会。
您可以改变Transparency属性,并且反复很短时间内再次获得此效果,但渐变渐变需要至少 10 次在 0 和 1 之间的更改。那是 20 行很重复的验证码。
这可以通过使用 为 循环来更有效地实现。这种循环使用特定数量的次数重复代码。每个循环的代码都被称为 次数 。一个 for 循环由三个部分组成:
- 控制变量 - 创建和使用来计数循环的变量。在此示例中,它是 count ,起始值是 1 。
- 结束值 - 它必须得到循环停止的值。 在此示例中,它是 10。
- 步骤增量 (可选) - 确定要在每个循环中添加控制变量。如果未设置,它将默认为 1,因此在此示例中不是必要的。
在 FadeOnTouch 中:
在函数中,创建一个 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事件每次用户的身体部分与零件接触时会发生。这种行为会在用户在�ading平台上运行时导致问题:功能将在多次重置循环。
为了使代码正常运行,函数只需要在用户触摸平台时第一次运行。确保操作只会在多次触摸时触发时才会触发一次是知道为 弹跳 。
要将函数弹出,一个 Boolean 变量可以用来跟踪平台是否已触摸。只有 Booleans 可以包含 真 和 假 值。创建一个名为 2> isTouched2> 的变量,并将其设置为 5> 8>假8>。
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 变量是否弹出,可以使用 if 语句仅在渐变函数中运行代码。将渐变函数的 body 包含在 if 语句中,并使用 not isTouched 条件包含 1> isTouch1> 。
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)
Lua not 操作器将操作后跟随的值反向。在条件性语条款中,这意味着第一个 if 语句与跟关注的语句保持相同。
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
切换弹跳
当前,fade 函数中的代码将始终运行,因为 isTouched 是 false 和 not isTouched 评估为 true。要完成 debounce 路径,您需要在两个位置切换变量的值。
- 将 isTouched 设置为 true 在 if 声明中,平台开始渐渐消失。
- 将其设置为 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)