迴圈和陣列

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

陣列可以與 whilefor 迴圈結合,對每個索引值重複相同的代碼。例如,將陣列中的每個玩家傳送到新的地方或讓一個零件陣列著火。

要探索如何迴圈遍歷陣列,創建一條消失的橋樑路徑,將部分放入陣列中,然後一個接一個地使它們消失。

遍歷陣列

對於該專案,找到或創建三個部分使其消失。這些部分必須都被固定(anchored)。

  1. 創建三個零件。按它們應該消失的順序命名零件,如 Part1、Part2、Part3。

  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 的新變數,並將其設置為 pathArray[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)

編寫第二個迴圈

目前,這些零件永遠消失。要使它們重新出現,創建第二個 for 迴圈,遍歷每個零件並立即使每一個零件可通行。

  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. 自行嘗試 編寫第二個 for 迴圈,使該路徑可再次使用,方法是將每個零件的 CanCollide 屬性設置為 true 和 Transparency 設置為 0。完成後,將您的工作與以下代碼進行比較。


    -- 通過使所有零件再次可通行來重置路徑
    for partIndex = 1, #pathArray do
    local whichPart = pathArray[partIndex]
    whichPart.CanCollide = true
    whichPart.Transparency = 0
    end
  3. 測試專案以確認當所有零件消失時,它們會重新出現。

使用 while 迴圈重複

零件消失並重新出現,但僅一次。為了讓代碼持續重複,將所有代碼嵌套在 while 迴圈中。

  1. 在腳本底部創建一個新的 while true do 迴圈。然後,同時移動兩個 for 迴圈到 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. 在 Workspace 中創建一個名為 PartsFolder 的資料夾。添加任意數量的零件。

  2. 在 ServerScriptService 中,創建一個新腳本並引用該資料夾。

  3. 使用 GetChildren() 自動獲取一個列出資料夾中所有物件的陣列。


    local partsFolder = workspace.PartsFolder
    -- 獲得一個列出 PartsFolder 中零件的陣列
    local partsArray = partsFolder:GetChildren()
  4. 在 for 迴圈中使用 in ipairs(ArrayToUse) 來遍歷 partsArray 並添加粒子。

    完成的腳本

    -- 獲得一個列出 PartsFolder 中零件的陣列
    local partsArray = partsFolder:GetChildren()
    -- 對陣列中的每個零件添加粒子
    for index, part in ipairs(partsArray) do
    local particles = Instance.new("ParticleEmitter")
    particles.Parent = part
    end

進行遊玩測試,觀察粒子從資料夾中的每個部分中浮起。

總結

迴圈可以與陣列結合,快速處理任意數量的值。如果你想準確控制某幾個零件的行為以及它們的順序,則必須將陣列硬編碼為特定值。

要處理許多零件而順序無關緊要的情況,可以使用 GetChildren() 創建物件的子物件陣列。利用 ipairs(),可以在不知陣列大小的情況下快速遍歷該列表。

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。