数组可以与循环结合使用,例如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.0local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3,}while true do-- 按顺序从数组中使一个部件消失for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- 等待一秒钟后使路径重新出现task.wait(1.0)-- 通过使所有部件再次可行走来重置路径for partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endend
数组和 ipairs()
ipairs() 与 数组一起使用。ipairs() 中的 "i" 代表 "索引"。可以使用 ipairs() 快速在许多对象上重复操作,比如,一个装满部件的文件夹。
下面将通过快速向一整个文件夹的部件添加粒子来演示。
在 Workspace 中,创建一个名为 PartsFolder 的文件夹。添加任意数量的部件。
在 ServerScriptService 中,创建一个新脚本并引用该文件夹。
使用 GetChildren() 自动获取一个数组,列出文件夹中的所有对象。
local partsFolder = workspace.PartsFolder-- 获取 PartsFolder 中部件的数组列表local partsArray = partsFolder:GetChildren()使用 in ipairs(ArrayToUse) 结合 for 循环遍历 partsArray 并添加粒子。
完成的脚本-- 获取 PartsFolder 中部件的数组列表local partsArray = partsFolder:GetChildren()-- 为数组中的每个部件添加粒子for index, part in ipairs(partsArray) dolocal particles = Instance.new("ParticleEmitter")particles.Parent = partend
进行游戏测试并观察粒子从文件夹中的每个部件中升起。
总结
循环可以与数组结合使用,以快速处理任意数量的值。如果您想精确控制某些部件发生的事情及其顺序,数组必须硬编码为特定值。
要处理多个部件而不在意顺序,可以使用 GetChildren() 创建一个对象子级的数组。利用 ipairs(),可以快速遍历该列表,而不需要知道数组的大小。