循环和阵列

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

阵列 可以与循环子表,例如 ,重复每个索引值的相同代码。例如,将每个玩家在阵列中的新位置传送到新位置或将一个部件的阵列捕获火触发。

要探索通过阵列循环的过程,请创建一个消失的桥路,在其中部分放置在阵列中,然后作为一个完整消失。

在阵列中循环

对于项目,寻找或创建一个由三个零件组成的集合以使其消失。零件必须都锚定。

  1. 创建三个零件。 将零件按照它们应该消失的顺序命名零件, 零件1,零件2,零件3。

  2. 在 ServerScriptService 中,插入一个新脚本,创建一个阵列来存储零件。


    local pathArray = {
    }
  3. 在每行中,单击每个零件的名称。使用新行为每个值提供更清晰的可已读性。


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

使用阵列与 for 循环

使用 for 循环去通过阵列,控制零件在零件索引在阵数组中的速度。

  1. 要控制零件在几秒内消失的频率,请创建一个名为 VANISH_RATE 的变量。在测试中,最好保持它小于 1 个数量。


    local VANISH_RATE = 1.5
    local pathArray = {
    workspace.Part1,
    workspace.Part2,
    workspace.Part3
    }
  2. 创建一个 for 循环,使用以关注中/正在关注内容: 开始: partIndex = 1,数组列中的第一个值的索引。 结束: 1> #pathArray1>,该数组的大小。


    for partIndex = 1, #pathArray do
    end
  3. 在零件消失之前,在循环中,添加一个 task.wait() 使用 VANISH_RATE


    for partIndex = 1, #pathArray do
    task.wait(VANISH_RATE)
    end
  4. 要将零件隐藏,请创建一个名为 whichPart 的新变量,并将其设置为 partsArray[partIndex] 。然后,将其零件隐藏,将其设置为 CanCollide 属性为 false 并将其设置为 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)

编写第二个循环

现在,零件将永远消失。要让它们重新出现,请创建一个二进制,它将穿过每个零件并立即使每个部分可行。

  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. 独自 ,请尝试编写一个第二个循环,使路径再次可用,改变每个部分的 CanCollide 属性为 true 并将透明度设置为 0。当完成后,请检查您的工作与以下代码。


    -- 重置所有部分走路可能
    for partIndex = 1, #pathArray do
    local whichPart = pathArray[partIndex]
    whichPart.CanCollide = true
    whichPart.Transparency = 0
    end
  3. 测试项目确认,当所有部分都消失时,它们会回返回。

使用 While 循环重复

零件会消失和重新出现,但只会出现一次。 要使代码保持重复,请将所有代码嵌套在一个时间循环中。

  1. 在脚本的底部,创建一个新的 While 真的循环。然后, 移动 both 为循环到 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. 在工作区中,创建一个名为 PartsFolder 的文件夹。添加你喜欢的多少部分。

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

  3. 使用 GetChildren() 自动获取文件夹中的所有对象列表。


    local partsFolder = workspace.PartsFolder
    -- 获取 PartsFolder 中的零件列表
    local partsArray = partsFolder:GetChildren()
  4. 使用 in ipairs(ArrayToUse) 与 for 循环通过零件阵列并添加粒子。

    已完成脚本

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

测试并观看文件夹中的每个部分从哪里漂浮出来。

概要

循环可以与阵列结合使用任何数值快速工作。如果您想要对几个部件和在哪个顺序下发生的事情进行准确的控制,则必须使用具体值的阵列。

要在许多部分中工作时不会发生顺序,可以使用 GetChildren() 创建一个对象的子列。使用 ipairs() ,列可以快速迭代过不知道阵数组的大小。