循环练习 - 创建时间桥

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

这个项目是另一个使用循环方式使用的实例。 对于这个桥,玩家将触摸一个按钮以使桥在有限时间内可走桥,然后消失。 要创建计时器并显示剩余时间给玩家,您将使用循环。

设置项目

这座桥可以包含任何移动基础挑战的游戏项目,例如障碍赛。

创建零件

  1. 在障碍赛中寻找一条桥的建造位置,例如河流或大间隙。创建三个 锚定 零件,例如下面。

    • 计时器显示
    • 按钮桥
  2. 当不激活时,桥将是半透明的。要实现此目标,请选择 并更改其属性。

    • 透明度 = 0.8
    • CanCollide = 是

创建计时器显示

当穿过桥时,玩家需要看到桥是否消失之前剩下多少秒。一个方法来显示图像或文本是通过添加名为“界面”的对象来显示。 界面 也可以用于创建游戏标志、自定义健康条和物品栏系统。 此教程将在快速完成,但您可以在教程部分中找到更多信息。

  1. 选择 TimerDisplay 并添加一个 界面显示器 。然后,父级于界面显示器添加一个 文本标签

  2. 选择表面 GUI。在属性中,进行以下更改:

    • 改变 以便您可以看到玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩家在玩
  3. 选择 TextLabel。在属性中,进行以下更改:

    • 大小 设置为 {1, 0},{1, 0}
    • 文本缩放 设置为 true。
    • 文本 设置为空。文本将使用脚本进行更新。

设置脚本

现在计时器已场景,创建一个脚本来控制桥,并显示倒计时数给玩家。

  1. 在桥梁部分中,添加一个名为 TimedBridge 的新脚本。在那个脚本中,创建以下变量。


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- 桥梁的使用寿命
    local timerDuration = 5

编写触摸交互

要使用桥,您需要创建两个函数。一个函数将使桥可以走路,显示计时器。另一个函数会听取玩家触摸桥按钮时触发的按钮。

  1. 创建一个名为 startTimer() 的新函数,内部打印声明。你将使用打印声明来测试你的验证码。


    local timerDuration = 5
    local function startTimer()
    print("Countdown started")
    end
  2. 代码一个名为 buttonPressed() 的函数来检查是否有人类触摸按钮。该函数应接受一个参数的 partTouched ,然后在检查到人形时有一个空 if 声明。


    local function startTimer()
    print("Countdown started")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. 要启动计时器,在 if 声明中,调用 startTimer() 函数。


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. buttonPressed() 的结束时,连接按钮的 buttonPressed() 函数到按钮的 Touched 事件。


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. 运行项目。触摸零件并检查在输出窗口中查看打印声明。

排查提示

如果桥梁不能如预期般运行,请尝试以下其中一个。 发生了问题 : 错误消息,说: 「*... 不是有效的工作区成员」*」。

  • 在 TimedBridge 脚本中,检查所有部分的拼写正确,如在 Explorer 中所见。 问题 : 看不见零件。

  • 确保所有三个部分都锚定。

  • 检查桥梁的透明度属性。

创建计时器

每当玩家踏上桥,startTimer() 就会使桥可以走路,并且开始计时器。当计时器达到 0 时,桥将变得不可走行,因此任何跑得不够快的人都会下落下来。

让桥梁可行走

首先,脚本需要使桥梁牢固,或可碰撞,然后开始倒计时,直到它变得不可走路。

  1. 要使桥梁可行走,在 startTimer() 中,将桥梁的透明度属性改为 0 (opaque) ,并将 CanCollide 属性设置为 true。


    local function startTimer()
    -- 使桥梁可见,可以走过去
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. 要创建一个倒计时计时器,请创建以下值为循环。

    • 控制变量 : 命名为 count,设置为 timerDuration
    • 结束 : 0
    • 增量 : -1

    local function startTimer()
    -- 使桥梁可见,可以走过去
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. 要将计时器显示给玩家,改变 timerText 中的文本以显示计数,通过输入 timerText.Text = count 显示。每次循环完成后,它将向玩家显示下一个数字。


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. 使用 task.wait 函数来让 for 循环只发生一次每秒。


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. 运行游戏。当您触摸按钮时,桥梁应该出现,然后开始计时,然后完成。

确保桥梁从重新启动

注意,如果您在按钮上移动,计时器将继续重置。

这是因为按钮触摸时,您将调用 for 循环每次,从开始 for 循环。要使时间器从开始 for 循环到开始时,您需要添加一个Boolean类型变量,它将控制是否允许 startTimer() 被称为。 Booleans 用于写入其他变量的方式,但相反于使用数字或字符串,它们只能设置为真或为假。在这种情况下,脚本将使用一个Boolean来检查是否启动计时器,然后才会启动它。

  1. 在你的脚本的顶部,在你的变量下,创建一个名为 timerActive 的变量,并将其设置为 false,因为还没有人按下按钮。


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. 要确保计时器只会在 timerActive 是否是 false 时启动,请在 buttonPressed() 中添加一个额外的条件。


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. 要确保 startTimer() 在倒计时结束前不会再次运行,请将Boolean设置为 true。


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. startTimer() 函数中,在 for 循环,将桥返回到其原始属性,通过将桥的透明度改为 0.8 并 CanCollide 为 false 来将桥恢复到原始状态。


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- 从 timerDuration 开始倒计时的循环
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- 让桥不能走路
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. 重置桥梁的最后一件事是将 timerText 更改为空文本,就像它之前的样子。然后将 timerActive 设置为 false。


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. 测试并确认桥梁可以多次使用。

完成时间桥脚本


local bridge = script.Parent
-- 获取 Explorer 中键名为它所打出的按钮
local button = workspace.ButtonBridge
-- 获取显示部分的零件
local timerPart = workspace.TimerDisplay
-- 获得显示计时器的文本
local timerText = timerPart.SurfaceGui.TextLabel
-- 玩家需要通过桥梁多久
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- 从 timerDuration 开始倒计时的循环
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- 让桥不能走路
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

概要

循环可以与不同的交互方式结合,以创建有趣的游戏玩法时刻。 在本教程中,使用 for 循环作为倒计时的桥梁。 在倒计时结束时,玩家被给予限时来通过。