陣列可以與 while 和 for 迴圈結合,對每個索引值重複相同的代碼。例如,將陣列中的每個玩家傳送到新的地方或讓一個零件陣列著火。
要探索如何迴圈遍歷陣列,創建一條消失的橋樑路徑,將部分放入陣列中,然後一個接一個地使它們消失。
遍歷陣列
對於該專案,找到或創建三個部分使其消失。這些部分必須都被固定(anchored)。
創建三個零件。按它們應該消失的順序命名零件,如 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()在 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(),可以在不知陣列大小的情況下快速遍歷該列表。