循环和阵列

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

阵列 可以与循环结合,例如 whilefor ,重复每个索引值的相同代码。例如,将每个玩家在阵列中传送到新的地方或使一个部分阵列发生火触发。

要探索通过阵列循环,创建一个消失的桥路径,其中零件被放置到阵列中,然后逐个消失。

循环通过一个阵数组

对于项目,找到或创建一个由三个部分组成的消失集合。所有部分都必须被锚定。

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

  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 的新变量并将其设置为 partsArray[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) ,

编写第二个循环

现在,零件永远消失了。要使它们重新出现,创建一个第二个循环,该循环将通过每个部分并立即使每个部分都能行走。

  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 循环重复

零件会消失并重新出现,但只有一次。要使代码继续重复,请将所有代码都嵌套在 while 循环中。

  1. 在脚本底部,创建一个新的 while 真实循环。然后, 将循环移至 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
    -- 获取一个列出零件在零件文件夹中的阵列
    local partsArray = partsFolder:GetChildren()
  4. 使用 in ipairs(ArrayToUse) 与 for 循环去通过 partsArray 并添加粒子。

    完成的脚本

    -- 获取一个列出零件在零件文件夹中的阵列
    local partsArray = partsFolder:GetChildren()
    -- 向阵列中的每个部分添加粒数组
    for index, part in ipairs(partsArray) do
    local particles = Instance.new("ParticleEmitter")
    particles.Parent = part
    end

测试并观察文件夹中的每个部分上升的粒子。

摘要

循环可以与阵列结合以快速处理任何数量的值。如果您想对几个部件发生的事情和顺序进行准确控制,阵列必须用特定值进行硬编码。

要与许多部分进行工作,其中订单不重要,GetChildren()可以创建一个对象的子集阵列。使用 ipairs() , 列表可以快速遍历而不需要知道阵数组的大小。