循环练习 - 创建一个定时桥

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

这个项目是使用for循环的另一个实际示例。在这个桥上,玩家将触摸一个按钮,使桥在有限的时间内可行走,然后消失。为了创建一个计时器并向玩家显示剩余时间,您将使用for循环。

设置项目

这个桥可以包含在任何具有基于移动的挑战的Roblox项目中,比如一个障碍赛。

创建部件

  1. 找一个地方来建造桥,比如一条河流或障碍赛中的一个大缺口。创建三个固定的部件,如下所示。

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. 当不活动时,桥将是半透明的。为此,选择Bridge并更改其属性。

    • 透明度 = 0.8
    • 可碰撞 = False

创建计时器显示

在过桥时,玩家需要看到桥消失前还剩多少秒。显示图像或文本的一种方法是向部件添加一个名为Surface GUI的对象。Surface GUIs也可以用于创建游戏内标志、自定义生命值条和库存系统。本教程将快速介绍这一点,但更多信息可以在教程部分找到。

  1. 选择TimerDisplay并添加一个SurfaceGui。然后,将TextLabel作为Surface Gui的子对象添加。

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

    • 更改以便您可以在玩家查看的计时器前面看到文本标签。
  3. 选择TextLabel。在属性中,进行以下更改:

    • 大小设置为{1, 0},{1, 0}
    • 文本缩放设置为true。
    • 文本设置为空。文本将通过脚本更新。

设置脚本

现在计时器已就位,创建一个脚本来控制桥并向玩家显示倒计时数字。

  1. 在Bridge部件中,添加一个名为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("倒计时开始")
    end
  2. 编写一个名为buttonPressed()的函数,以检查一个人形是否触摸了按钮。该函数应接受一个参数partTouched,然后在检测到人形的部分中有一个空的if语句。

    local function startTimer()
    print("倒计时开始")
    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. 运行项目。触摸该部件并在输出窗口中检查打印语句。

故障排除提示

此时,如果桥没有按预期工作,请尝试以下方法之一。

问题:错误消息显示:"... 不是workspace的有效成员"

  • 在TimedBridge脚本中,检查所有部件的拼写是否与Explorer中看到的完全相同。

问题:看不到部件。

  • 确保所有三个部件都是固定的。
  • 检查桥的透明度属性。

创建计时器

每当玩家踩上桥时,startTimer()将使桥可行走并启动计时器。一旦计时器达到0,桥将变得不可行走,导致任何不够快的人掉落。

使桥可行走

首先,脚本需要使桥坚固或可碰撞,然后启动一个计时器,直到它变得不可行走。

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

    local function startTimer()
    -- 使桥可见和可行走
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. 为了创建一个倒计时的计时器,创建一个for循环,使用以下值。

    • 控制变量:命名为count,设置为timerDuration
    • 结束:0
    • 增量:-1
    local function startTimer()
    -- 使桥可见和可行走
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. 为了向玩家显示计时器,将timerText中的文本更改为显示count,输入timerText.Text = count。每次for循环进行一次迭代时,它将向玩家显示计时器中的下一个数字。

    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循环都会被调用并从头开始。为了防止计时器不断重新启动,您需要添加一个布尔值,这是一种变量类型,用于控制是否允许再次调用startTimer()

布尔值的写法与其他变量相同,但它们只能设置为true或false。在这种情况下,脚本将使用布尔值检查计时器当前是否正在运行,然后再启动它。

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

    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. 为了确保计时器仅在timerActive布尔值为false时启动,在buttonPressed()中的if语句中添加第二个条件。

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. 为了防止startTimer()在计时器结束之前再次运行,将布尔值timerActive设置为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循环
    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("倒计时开始")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- 从timerDuration倒计时的for循环
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("部件被触摸")
if humanoid and timerActive == false then
print("开始计时器")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

总结

循环可以与不同的交互方式结合,以创造有趣的游戏时刻。在本教程中,使用一个作为倒计时的for循环创建了一个定时桥。在倒计时期间,玩家有有限的时间通过桥。

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。