数组可以与循环结合使用,例如while和for,以对每个索引值重复相同的代码。例如,将数组中的每个玩家传送到一个新地方,或使一组部件着火。
要探索遍历数组的循环,创建一个消失的桥梁路径,将部件放入数组中,然后一个一个地使其消失。
遍历数组
对于该项目,找到或创建一组三个要消失的部件。这些部件必须全部固定。
创建三个部件。按它们应该消失的顺序命名部件,分别为 Part1、Part2、Part3。
在 ServerScriptService 中,插入一个新脚本并创建一个数组来存储这些部件。
local pathArray = {}在每一行中,按它们应该消失的顺序输入部件的名称。每个值使用新行可以使其更易于阅读。
local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3,}
使用 for 循环与数组
使用 for 循环遍历数组,并控制部件在数组中按索引顺序消失的速度。
为了控制部件消失的频率(以秒为单位),创建一个名为 VANISH_RATE 的变量。为了测试,最好将其保持在一个较小的数字。
local VANISH_RATE = 1.5local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3}创建一个 for 循环,内容如下:开始: partIndex = 1,数组中第一个值的索引。结束: #pathArray,该数组的大小。
for partIndex = 1, #pathArray doend为了在部件消失之前有一个延迟,在循环中添加一个 task.wait(),使用 VANISH_RATE。
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)end为了使部件消失,创建一个名为 whichPart 的新变量,并将其设置为 pathArray[partIndex]。然后,为了使该部件消失,将其 CanCollide 属性设置为 false,并将 Transparency 设置为 1。
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end检查路径的部件是否随着时间的推移而消失。
故障排除提示
如果桥梁没有消失,请检查以下可能的问题:
问题: 部件消失得太快,或者一开始就全部消失。
- 根据你的角色加载到游戏中的速度,第一个部件可能已经不可见。为了解决这个问题,在脚本的开头添加一个小的等待,例如 task.wait(2)。
编写第二个循环
现在,部件会永远消失。为了使它们重新出现,创建一个第二个 for 循环,遍历每个部件并立即使每个部件可行走。
在第一个循环之后,添加一个 task.wait(),以在路径重新出现之前创建一个短暂的延迟。
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endtask.wait(1)自己尝试编写第二个 for 循环,使路径再次可用,通过将每个部件的 CanCollide 属性更改为 true 和 Transparency 更改为 0。完成后,将你的代码与下面的代码进行对比。
-- 通过使所有部件再次可行走来重置路径for partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0end测试项目以确认所有部件消失后会重新出现。
使用 while 循环重复
部件消失并重新出现,但仅一次。为了使代码持续重复,将所有代码嵌套在一个 while 循环中。
在脚本的底部,创建一个新的 while true do 循环。然后,将两个 for 循环移动到 while 循环中。
while true do-- 按顺序使数组中的部件消失for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- 在使路径重新出现之前等待一秒task.wait(1)-- 通过使所有部件再次可行走来重置路径for partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endend检查所有部件消失后是否会重新出现。
可以下载项目的完成版本。
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() 快速对大量对象执行操作,例如,一个包含多个部件的文件夹。
这将通过快速向整个部件文件夹添加粒子来演示。
在 Workspace 中,创建一个名为 PartsFolder 的文件夹。添加任意数量的部件。
在 ServerScriptService 中,创建一个新脚本并引用该文件夹。
使用 GetChildren() 自动获取一个列出文件夹中所有对象的数组。
local partsFolder = workspace.PartsFolder-- 获取 PartsFolder 中部件的数组列表local partsArray = partsFolder:GetChildren()在 for 循环中使用 in ipairs(ArrayToUse) 遍历 partsArray 并添加粒子。
完成的脚本-- 获取 PartsFolder 中部件的数组列表local partsArray = partsFolder:GetChildren()-- 向数组中的每个部件添加粒子for index, part in ipairs(partsArray) dolocal particles = Instance.new("ParticleEmitter")particles.Parent = partend
进行游戏测试,观察粒子从文件夹中的每个部件上升。
总结
循环可以与数组结合使用,以快速处理任意数量的值。如果你想精确控制几个部件的操作及其顺序,则必须将数组硬编码为特定值。
要处理许多部件而不考虑顺序,可以使用 GetChildren() 创建对象子项的数组。利用 ipairs(),可以快速遍历列表,而无需知道数组的大小。