这个项目是使用for循环的另一个实际示例。在这个桥上,玩家将触摸一个按钮,使桥在有限的时间内可行走,然后消失。为了创建一个计时器并向玩家显示剩余时间,您将使用for循环。
设置项目
这个桥可以包含在任何具有基于移动的挑战的Roblox项目中,比如一个障碍赛。
创建部件
找一个地方来建造桥,比如一条河流或障碍赛中的一个大缺口。创建三个固定的部件,如下所示。
- TimerDisplay
- Bridge
- ButtonBridge

当不活动时,桥将是半透明的。为此,选择Bridge并更改其属性。
- 透明度 = 0.8
- 可碰撞 = False
创建计时器显示
在过桥时,玩家需要看到桥消失前还剩多少秒。显示图像或文本的一种方法是向部件添加一个名为Surface GUI的对象。Surface GUIs也可以用于创建游戏内标志、自定义生命值条和库存系统。本教程将快速介绍这一点,但更多信息可以在教程部分找到。
选择TimerDisplay并添加一个SurfaceGui。然后,将TextLabel作为Surface Gui的子对象添加。

选择Surface GUI。在属性中,进行以下更改:
- 更改面以便您可以在玩家查看的计时器前面看到文本标签。
选择TextLabel。在属性中,进行以下更改:
- 将大小设置为{1, 0},{1, 0}。
- 将文本缩放设置为true。
- 将文本设置为空。文本将通过脚本更新。
设置脚本
现在计时器已就位,创建一个脚本来控制桥并向玩家显示倒计时数字。
在Bridge部件中,添加一个名为TimedBridge的新脚本。在该脚本中,创建以下变量。
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- 桥保持坚固的时间local timerDuration = 5
编写触摸交互
要使用桥,您需要创建两个函数。一个函数将使桥可行走并显示计时器。另一个函数将监听玩家是否触摸激活桥的按钮。
创建一个名为startTimer()的新函数,并在其中添加一个打印语句。您将使用打印语句来测试代码。
local timerDuration = 5local function startTimer()print("倒计时开始")end编写一个名为buttonPressed()的函数,以检查一个人形是否触摸了按钮。该函数应接受一个参数partTouched,然后在检测到人形的部分中有一个空的if语句。
local function startTimer()print("倒计时开始")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendend为了启动计时器,在if语句中调用startTimer()函数。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endend在buttonPressed()的末尾,将buttonPressed()函数连接到按钮的Touched事件。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)运行项目。触摸该部件并在输出窗口中检查打印语句。
故障排除提示
此时,如果桥没有按预期工作,请尝试以下方法之一。
问题:错误消息显示:"... 不是workspace的有效成员"。
- 在TimedBridge脚本中,检查所有部件的拼写是否与Explorer中看到的完全相同。
问题:看不到部件。
- 确保所有三个部件都是固定的。
- 检查桥的透明度属性。
创建计时器
每当玩家踩上桥时,startTimer()将使桥可行走并启动计时器。一旦计时器达到0,桥将变得不可行走,导致任何不够快的人掉落。
使桥可行走
首先,脚本需要使桥坚固或可碰撞,然后启动一个计时器,直到它变得不可行走。
为了使桥可行走,在startTimer()中,将桥的透明度属性更改为0(不透明),并将CanCollide属性设置为true。
local function startTimer()-- 使桥可见和可行走bridge.Transparency = 0bridge.CanCollide = trueend为了创建一个倒计时的计时器,创建一个for循环,使用以下值。
- 控制变量:命名为count,设置为timerDuration。
- 结束:0
- 增量:-1
local function startTimer()-- 使桥可见和可行走bridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendend为了向玩家显示计时器,将timerText中的文本更改为显示count,输入timerText.Text = count。每次for循环进行一次迭代时,它将向玩家显示计时器中的下一个数字。
for count = timerDuration, 0, -1 dotimerText.Text = countend使用task.wait函数使for循环每秒仅运行一次。
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end运行游戏。当您触摸按钮时,桥应该出现,计时器将开始,然后完成。
防止桥重新启动
请注意,如果您在按钮上移动,计时器将不断重新启动。
这是因为每次您触摸按钮时,for循环都会被调用并从头开始。为了防止计时器不断重新启动,您需要添加一个布尔值,这是一种变量类型,用于控制是否允许再次调用startTimer()。
布尔值的写法与其他变量相同,但它们只能设置为true或false。在这种情况下,脚本将使用布尔值检查计时器当前是否正在运行,然后再启动它。
在脚本顶部,在变量下方,创建一个名为timerActive的变量,并将其设置为false,因为还没有人按下按钮。
local timerDuration = 5local timerActive = falselocal function startTimer()为了确保计时器仅在timerActive布尔值为false时启动,在buttonPressed()中的if语句中添加第二个条件。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endend为了防止startTimer()在计时器结束之前再次运行,将布尔值timerActive设置为true。
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true在startTimer()函数中,在for循环之后,通过将桥的透明度更改为0.8和CanCollide更改为false来将桥恢复到其原始属性。
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- 从timerDuration倒计时的for循环for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- 使桥不可行走bridge.Transparency = 0.8bridge.CanCollide = falseend最后,为了重置桥,将timerText更改为空字符串,就像最初一样。然后,将timerActive布尔值设置为false。
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = false进行游戏测试,确保桥可以多次使用。
完整的定时桥脚本
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循环创建了一个定时桥。在倒计时期间,玩家有有限的时间通过桥。