循环和数组

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

数组可以与循环结合使用,例如whilefor,以对每个索引值重复相同的代码。例如,将数组中的每个玩家传送到一个新地点,或者让一个部件数组着火。

为了探索循环遍历数组的过程,可以创建一条消失的桥梁路径,在其中将部件放入数组中,然后逐个使其消失。

遍历数组

在项目中,找到或创建一组三个要消失的部件。所有部件必须都是固定的。

  1. 创建三个部件。按其消失顺序命名部件为 Part1、Part2、Part3。

  2. 在 ServerScriptService 中,插入一个新脚本并创建一个数组来存储这些部件。


    local pathArray = {
    }
  3. 在同一行中,按其消失顺序逐一输入部件名称。为每个值使用新行可以使其更易读。


    local pathArray = {
    workspace.Part1,
    workspace.Part2,
    workspace.Part3,
    }

使用 for 循环与数组

使用 for 循环遍历数组,并控制部件按照数组中索引的顺序消失的速度。

  1. 要控制部件消失的间隔(以秒为单位),创建一个名为 VANISH_RATE 的变量。为了测试,最好将其设置为一个较小的数字。


    local VANISH_RATE = 1.5
    local pathArray = {
    workspace.Part1,
    workspace.Part2,
    workspace.Part3
    }
  2. 创建一个 for 循环,内容如下:开始: partIndex = 1,即数组中第一个值的索引。结束: #pathArray,该数组的大小。


    for partIndex = 1, #pathArray do
    end
  3. 为了在部件消失之前设置延迟,在循环中添加 task.wait(),使用 VANISH_RATE


    for partIndex = 1, #pathArray do
    task.wait(VANISH_RATE)
    end
  4. 要使部件消失,创建一个新变量 whichPart 并将其设置为 pathArray[partIndex]。然后,将该部件的 CanCollide 属性设置为 false,Transparency 设置为 1,以使其消失。


    for partIndex = 1, #pathArray do
    task.wait(VANISH_RATE)
    local whichPart = pathArray[partIndex]
    whichPart.CanCollide = false
    whichPart.Transparency = 1
    end
  5. 检查路径的部件是否会随着时间而消失。

排除故障提示

如果桥梁没有消失,请检查以下可能的问题:

问题: 部件消失得太快,或者一开始就全部消失。

  • 根据角色加载到体验中的速度,首个部件可能已经是不可见的。为了解决这个问题,可以在脚本的开头添加一个小的等待,比如 task.wait(2)

编写第二个循环

现在,部件只消失一次。要使它们重新出现,创建一个第二个 for 循环,遍历每个部件并立即使每个部分变得可行走。

  1. 在第一个循环之后,添加一个 task.wait() 以在路径重新出现之前创建一个短暂的延迟。


    for partIndex = 1, #pathArray do
    task.wait(VANISH_RATE)
    local whichPart = pathArray[partIndex]
    whichPart.CanCollide = false
    whichPart.Transparency = 1
    end
    task.wait(1)
  2. 独立尝试编写第二个 for 循环,使路径可再次使用,通过将每个部件的 CanCollide 属性更改为 true,Transparency 更改为 0。当完成后,与下面的代码进行对照检查。


    -- 通过使所有部件再次可行走来重置路径
    for partIndex = 1, #pathArray do
    local whichPart = pathArray[partIndex]
    whichPart.CanCollide = true
    whichPart.Transparency = 0
    end
  3. 测试项目以确认所有部件消失后会移回来。

使用 while 循环重复

部件会消失并重新出现,但仅一次。要使代码持续重复,将所有代码嵌套在一个 while 循环中。

  1. 在脚本的底部,创建一个新的 while true do 循环。然后,将两个 for 循环移动到 while 循环中。


    while true do
    -- 按顺序从数组中使一个部件消失
    for partIndex = 1, #pathArray do
    task.wait(VANISH_RATE)
    local whichPart = pathArray[partIndex]
    whichPart.CanCollide = false
    whichPart.Transparency = 1
    end
    -- 等待一秒钟后使路径重新出现
    task.wait(1)
    -- 通过使所有部件再次可行走来重置路径
    for partIndex = 1, #pathArray do
    local whichPart = pathArray[partIndex]
    whichPart.CanCollide = true
    whichPart.Transparency = 0
    end
    end
  2. 检查所有部件消失后是否会重新出现。

可以下载项目的完成版本。

完成的脚本

local VANISH_RATE = 1.0
local pathArray = {
workspace.Part1,
workspace.Part2,
workspace.Part3,
}
while true do
-- 按顺序从数组中使一个部件消失
for partIndex = 1, #pathArray do
task.wait(VANISH_RATE)
local whichPart = pathArray[partIndex]
whichPart.CanCollide = false
whichPart.Transparency = 1
end
-- 等待一秒钟后使路径重新出现
task.wait(1.0)
-- 通过使所有部件再次可行走来重置路径
for partIndex = 1, #pathArray do
local whichPart = pathArray[partIndex]
whichPart.CanCollide = true
whichPart.Transparency = 0
end
end

数组和 ipairs()

ipairs()数组一起使用。ipairs() 中的 "i" 代表 "索引"。可以使用 ipairs() 快速在许多对象上重复操作,比如,一个装满部件的文件夹。

下面将通过快速向一整个文件夹的部件添加粒子来演示。

  1. 在 Workspace 中,创建一个名为 PartsFolder 的文件夹。添加任意数量的部件。

  2. 在 ServerScriptService 中,创建一个新脚本并引用该文件夹。

  3. 使用 GetChildren() 自动获取一个数组,列出文件夹中的所有对象。


    local partsFolder = workspace.PartsFolder
    -- 获取 PartsFolder 中部件的数组列表
    local partsArray = partsFolder:GetChildren()
  4. 使用 in ipairs(ArrayToUse) 结合 for 循环遍历 partsArray 并添加粒子。

    完成的脚本

    -- 获取 PartsFolder 中部件的数组列表
    local partsArray = partsFolder:GetChildren()
    -- 为数组中的每个部件添加粒子
    for index, part in ipairs(partsArray) do
    local particles = Instance.new("ParticleEmitter")
    particles.Parent = part
    end

进行游戏测试并观察粒子从文件夹中的每个部件中升起。

总结

循环可以与数组结合使用,以快速处理任意数量的值。如果您想精确控制某些部件发生的事情及其顺序,数组必须硬编码为特定值。

要处理多个部件而不在意顺序,可以使用 GetChildren() 创建一个对象子级的数组。利用 ipairs(),可以快速遍历该列表,而不需要知道数组的大小。