Roblox Studio · 第 6 课

循环与节奏:点亮倒计时信号灯

用 for 和 task.wait() 制作三秒倒计时,再比较有限循环和持续运行的循环。

10–15 岁 60 分钟 for / task.wait 动手实践 测试与保存

Course overview

让信号灯按节奏工作,不用复制粘贴十遍代码。

探险队准备出发:3、2、1,绿灯亮起!这段小小的倒计时,正适合交给循环。

你会先写一个可以数清次数的 for 循环,再给它加入等待和颜色。每次运行都应该能说清:执行了几次、最后停在哪里。

01 · BEFORE

开始之前

会使用数字变量、if 和 Output。新建独立 Baseplate 保存为 Lesson06。

02 · MAKE

你的作品

一个倒计时三秒、亮绿灯两秒、最后恢复待机的信号灯。

03 · CHECK

完成标志

Output 依次显示 3、2、1、GO;信号灯恢复原色,程序不会无休止运行。

官方循环灯光练习的灯体截图
图 6-1:官方灯体参考:一个简单 Part 也能成为信号灯;本课把它命名为 Signal。Roblox Creator Documentation · CC BY 4.0 · 原图未修改 · 许可说明

Learning route

先准备,再动手;看到结果后,记得保存。

每完成一小步,就测试一次。先说出你预计会看到什么,再用 Play 和 Output 检查,不用急着一次写完所有代码。

1

01 · 把信号灯放到眼前

先让场景足够简单,才能判断变化是否由代码造成。信号灯不必做得很漂亮,但要从出生点看得见。

2

02 · 认识循环的起点、终点和步长

for remaining = 3, 1, -1 表示从 3 开始,每次减 1,到 1 为止。终点符合步长方向时会被包含,所以这里执行三次。

3

03 · 把倒计时接上颜色

现在把循环体当作“一拍”。每一拍打印数字、变成橙色,再等一秒。循环结束后才执行绿灯部分。

4

04 · for 和 while 应该怎样选

已经知道要重复几次,就优先用 for。需要“只要条件还成立就继续”,可以用 while,但你必须说明条件怎样结束。

5

05 · 用次数和节奏定位问题

数字瞬间刷完,通常是循环体里漏了 task.wait。完全没输出,先检查起点、终点和步长是否匹配。

Step by step

01 · 把信号灯放到眼前

先让场景足够简单,才能判断变化是否由代码造成。信号灯不必做得很漂亮,但要从出生点看得见。

本课用 Color 和 Material 做视觉反馈。Neon 材质看起来会发亮,但它本身不会照亮旁边的物体;真正的照明会在第 14 课学习。

  1. 在 Workspace 创建 Part,命名 Signal,Size 设为 4, 4, 1,Position 设为 0, 5, -12。
  2. 勾选 Anchored,把 Material 设为 Neon。
  3. 在 ServerScriptService 新建 Countdown,打开 Output。

Step by step

02 · 认识循环的起点、终点和步长

for remaining = 3, 1, -1 表示从 3 开始,每次减 1,到 1 为止。终点符合步长方向时会被包含,所以这里执行三次。

task.wait(1) 让当前这段脚本稍后继续,游戏仍然可以处理其他事情。它不是高精度秒表,实际等待可能略长于一秒。

  1. 输入短代码,预测将出现的三个数字。
  2. Play 后观察 Output 的节奏。
  3. Stop 后把步长改成 -2,预测并验证结果是 3、1。
ServerScriptService > Countdown · 循环实验Luau
for remaining = 3, 1, -1 do
    print(remaining)
    task.wait(1)
end
print("GO!")
Output 中观察循环打印的官方界面参考
图 6-2:官方 Output 界面参考:运行倒计时时,按顺序检查 3、2、1,判断等待时间是否生效。Roblox Creator Documentation · CC BY 4.0 · 原图未修改 · 许可说明

Step by step

03 · 把倒计时接上颜色

现在把循环体当作“一拍”。每一拍打印数字、变成橙色,再等一秒。循环结束后才执行绿灯部分。

完整脚本只运行一轮,这样你很容易分辨结束位置。需要重试时 Stop,再 Play,而不是不断向脚本后面追加同一段代码。

  1. 替换 Countdown 全部内容。
  2. Play:橙色持续约三秒,绿色持续约两秒,最后恢复蓝色。
  3. 将数字 3 改为 5,检查倒计时是否增加了两拍。
ServerScriptService > Countdown · 完整脚本Luau
local signal = workspace:WaitForChild("Signal")
local READY = Color3.fromRGB(55, 140, 220)
local COUNTING = Color3.fromRGB(255, 190, 65)
local GO = Color3.fromRGB(80, 220, 130)

signal.Color = READY
task.wait(2)
for remaining = 3, 1, -1 do
    signal.Color = COUNTING
    print("Starting in", remaining)
    task.wait(1)
end
signal.Color = GO
print("GO!")
task.wait(2)
signal.Color = READY
print("Countdown finished")

Step by step

04 · for 和 while 应该怎样选

已经知道要重复几次,就优先用 for。需要“只要条件还成立就继续”,可以用 while,但你必须说明条件怎样结束。

下面是独立的五次闪烁版本,会替换前面的倒计时。每次亮和灭都有等待;如果忘记增加 flashes,条件可能永远成立。

  1. 先保留倒计时版本的副本,再用下面代码替换 Countdown。
  2. 数一数是否正好闪五次。
  3. 不要试运行没有等待的无限循环;它可能让 Studio 无法及时响应。
Countdown · 可选替换版本,不与上一段叠加Luau
local signal = workspace:WaitForChild("Signal")
local flashes = 0
while flashes < 5 do
    signal.Transparency = 0
    task.wait(0.4)
    signal.Transparency = 0.75
    task.wait(0.4)
    flashes += 1
end
signal.Transparency = 0
print("Flashes:", flashes)

Step by step

05 · 用次数和节奏定位问题

数字瞬间刷完,通常是循环体里漏了 task.wait。完全没输出,先检查起点、终点和步长是否匹配。

循环变量 remaining 只属于循环内部。想在循环结束后保留统计结果,应像 flashes 那样先在外面创建变量。

  1. 测试 1 秒和 0.5 秒等待,描述节奏差别。
  2. 确认每个 do 有对应的 end。
  3. 保留你更喜欢的一个版本,Stop 后保存。

Homework

轮到你来改一改,做出自己的版本。

1 五秒出发

把倒计时改为 5 到 1,绿灯持续 3 秒。

2 安静的信号灯

让程序通过不同颜色和最后的文字都能表达状态,不依赖声音。

3 选做:两轮信号

把完整的一轮装进函数,用 for 调用两次,中间留两秒休息。

完成标准:先在 Playtest 中验证作品,再点击 Stop,保存为“姓名缩写_Lesson06”或对应 Homework 副本;不要覆盖上一课的可运行版本。

Exit questions

先自己回答,再展开看看。

for i = 1, 4 do 执行几次?

四次,i 依次是 1、2、3、4。

为什么倒数需要 -1?

它是每次减少的步长,保证数字朝终点 1 前进。

task.wait 会暂停整款游戏吗?

不会,只让当前执行线程等待;其他脚本和游戏仍可运行。

while 的退出条件由谁保证?

由你的代码保证。要让条件最终变为 false,或在明确的条件下 break。

Explore further

需要查资料时,从这里出发。

正文代码可以直接复制。先确认脚本类型、放置位置,以及这段代码是完整版本还是小实验;不要把同一脚本的多个版本叠加运行。界面参考图已标注来源,图中的对象名可能与本课不同,请以操作步骤为准。