陣列可以與循環結合使用,例如 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(),可以快速遍歷列表,而無需知道陣列的大小。