嵌套迴圈

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

嵌套迴圈讓您可以批次重複任務。例如,烘焙三批六個杯子蛋糕,或在兩支隊伍上分配武器。

嵌套迴圈的運行方式

當迴圈嵌套時,腳本逐行執行,直到達到下一個迴圈。內部迴圈會執行直到滿足條件後再返回到外部迴圈。

嵌套迴圈邏輯

以下圖表顯示迴圈所經歷的步驟。

  • 外部迴圈:代碼逐行執行,直到達到內部迴圈。
  • 外部迴圈:代碼逐行執行,直到達到內部迴圈。
  • 外部迴圈:代碼逐行執行,直到達到內部迴圈。

嵌套迴圈示例

嵌套迴圈可能會有些抽象,因此視覺示例可以幫助理解。在本練習中,複制並粘貼一個示例腳本,並在 Studio 中運行它。此腳本將創建部件的塔。外部迴圈將控制需要製作的部件數量,而內部迴圈將創建實際的批次。

  1. ServerScriptService 中創建一個名為 PartMaker 的新腳本。複制以下代碼。


    local numberOfBatches = 7
    local partsPerBatch = 5
    local partsMade = 0
    -- 創建單個立方體
    local function createPart()
    local part = Instance.new("Part")
    part.Size = Vector3.new(2, 2, 2)
    part.CFrame = CFrame.new(20, 0, 20)
    part.Color = currentColor
    part.Parent = workspace
    end
    -- 外部迴圈
    for partBatch = 1, numberOfBatches do
    print("頂部外部迴圈:部件批 " .. partBatch)
    currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
    -- 內部迴圈
    for partNumber = 1, partsPerBatch do
    createPart()
    print("內部迴圈:部件 " .. partNumber)
    partsMade += 1
    task.wait(0.5)
    end
    print("底部外部迴圈:到目前為止創建了 " .. partsMade .. " 個部件。")
    task.wait(2)
    end
  2. 觀看此腳本生成不同顏色的部件批。在經過一批之後,將暫停 2 秒。外部迴圈中的 print 語句將僅在完成的內部迴圈中執行一次。

嵌套 for 迴圈塔

每個迴圈都有自己的一組代碼,因此可以負責不同的任務。嵌套迴圈可以做的一件事是改變物體生成的位置,以創建像這段視頻中的塔。共有三個不同的迴圈,每個迴圈用於控制立方體在塔的寬度、長度和高度上的生成位置。

編碼立方體生成器腳本

為了練習嵌套迴圈,您將編寫一個創建立方體塔的腳本。對於立方體塔腳本,首先編寫一個生成單個立方體的函數。塔的構建將通過重複調用此函數來實現。

設置腳本

對於立方體塔腳本,首先編寫一個生成單個立方體的函數。塔的構建將通過重複調用此函數來實現。

  1. 刪除 PartMaker 腳本或禁用它(在腳本屬性中,檢查禁止)。如果不這樣做,將會有兩個腳本在相同位置同時生成部件。

  2. 創建一個名為 TowerBuilder 的新腳本。在頂部添加塔的大小和立方體大小的變量。


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
  3. 添加一個名為 makeCube() 的本地函數,使用 CUBE_SIZE 創建一個單獨的正方體立方體。


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
    -- 創建單個立方體
    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    end
  4. 將立方體的顏色設置為一個在嵌套迴圈中會更新的變量。


    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    end
  5. 最後, 新的立方體添加到工作空間,使其顯示出來。


    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.Parent = workspace
    end

在不同方向生成

要創建塔,通過設置每個新立方體的 X、Y、Z 屬性在特定點生成立方體。X 和 Z 是並排的,Y 是上下。

  1. makeCube() 中,為 spawnXspawnYspawnZ 添加參數。這些數字將設置每個新立方體的生成位置。


    -- 創建單個立方體
    local function makeCube(spawnX, spawnY, spawnZ)
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.Parent = workspace
    end
  2. 在函數內,將立方體的 CFrame 屬性設置為使用 spawnXspawnYspawnZ 參數的新 CFrame。


    local function makeCube(spawnX, spawnY, spawnZ)
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
    cube.Parent = workspace
    end

使用嵌套迴圈生成

腳本將包含三個迴圈,每個迴圈分別用於塔的長度、寬度和高度。為了在向上移動之前完成整個樓層,首先設置 Y 坐標在第一個外部迴圈中。

  1. makeCube() 函數下,創建一個 for 迴圈以設置每個立方體生成的 高度

    • 控制變量heightIndex = 1
    • 終點TOWER_SIZE
    • 在迴圈內添加:local spawnY = (heightIndex - 1) * CUBE_SIZE

    -- 構建塔
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    end
  2. 在第一個高度迴圈完成後,開始第二個。將新的 for 迴圈添加進入第一個 for 迴圈中,以設置立方體在塔的長度上的放置位置。

    • 控制變量:lengthIndex = 1
    • 終點TOWER_SIZE
    • 在該迴圈內添加:local spawnX = lengthIndex * CUBE_SIZE

    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    end
    end
  3. 第二 個迴圈內,添加一個 第三 個 for 迴圈以設置塔的 寬度。在這個最內部的迴圈中,調用 makeCube() 並傳入 X、Y、Z 參數。

    • 控制變量widthIndex = 1
    • 終點TOWER_SIZE
    • 在迴圈內添加:
      • local spawnZ = widthIndex * CUBE_SIZE
      • makeCube(spawnX, spawnY, spawnZ)
      • 等待 0.25 秒以便觀察塔的構建。

    -- 構建塔
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    for widthIndex = 1, TOWER_SIZE do
    local spawnZ = widthIndex * CUBE_SIZE
    makeCube(spawnX, spawnY, spawnZ)
    task.wait(0.25)
    end
    end
    end
  4. 為了使每一層都顯示隨機顏色,將 currentColor 改為在創建新樓層的同一迴圈中的隨機 RGB 數字。


    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    for widthIndex = 1, TOWER_SIZE do
    local spawnZ = widthIndex * CUBE_SIZE
    makeCube(spawnX, spawnY, spawnZ)
    task.wait(0.25)
    end
    end
    end
  5. 運行專案並等待查看是否生成了一個完整的塔,且沒有在輸出窗口中出現錯誤。

可選挑戰

以下是使用不同方式嵌套迴圈的各種自導挑戰。在查看解決方案之前,嘗試自行編碼。

逐漸消失的部件

隨著塔的構建,讓從左到右的部件漸變透明。

代碼解決方案如下。


local TOWER_SIZE = 6
local CUBE_SIZE = 2
-- 創建單個立方體
local function makeCube(spawnX, spawnY, spawnZ)
local cube = Instance.new("Part")
cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
cube.Color = currentColor
cube.Transparency = cubeTransparency -- 設置透明度
cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
cube.Parent = workspace
end
-- 構建塔
for heightIndex = 1, TOWER_SIZE do
local spawnY = (heightIndex - 1) * CUBE_SIZE
currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
for lengthIndex = 1, TOWER_SIZE do
local spawnX = lengthIndex * CUBE_SIZE
cubeTransparency = (lengthIndex - 1) * 0.10 -- 每次迴圈從 0 開始更新
for widthIndex = 1, TOWER_SIZE do
local spawnZ = widthIndex * CUBE_SIZE
makeCube(spawnX, spawnY, spawnZ)
task.wait(0.05)
end
end
end

從天而降的物件

嘗試生成實際的物件,而不是部件。這裡的例子使用的是杯子蛋糕。

獨立思考,看看您能否:

  • 從基本部件創建一個物件。確保將所有部件焊接在一起,以便物件不會散開。
  • 將物件放入 ServerStorage 中
  • 修改在 嵌套迴圈示例 中找到的 PartMaker,以使用您的物件而不是部件。

以下是樣本。

包含杯子蛋糕的代碼解決方案如下。


local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
-- 創建單個杯子蛋糕
local function makeCupcake()
local ServerStorage = game:GetService("ServerStorage")
local cupcake = ServerStorage.Cupcake:Clone()
local cup = cupcake.Cup
local frosting = cupcake.Frosting
cupcake:SetPrimaryPartCFrame(CFrame.new(0, 20, 0) * CFrame.Angles(0, 0, -90))
frosting.Color = frostingColor
cup.Color = cupColor
cupcake.Parent = workspace
end
-- 外部迴圈
for cupcakeBatch = 1, numberOfBatches do
print("頂部外部迴圈:杯子蛋糕批次 " .. cupcakeBatch)
frostingColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
cupColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
-- 內部迴圈
for cupcakeNumber = 1, cupcakesPerBatch do
makeCupcake()
print("內部迴圈:杯子蛋糕 " .. cupcakeNumber)
-- 記錄烘焙的杯子蛋糕
cupcakesBaked += 1
task.wait(0.5)
end
print("底部外部迴圈:到目前為止烘焙了 " .. cupcakesBaked .. " 個杯子蛋糕。")
end

總結

為了完成更複雜的任務,開發者會發現結合多個迴圈,甚至不同類型的迴圈是有幫助的。所有迴圈都可以嵌套,這意味著一個迴圈就在另一個迴圈裡面。嵌套迴圈遵循與其他迴圈相同的邏輯。它從第一個最外部的迴圈開始,通過內部迴圈執行任務,然後如果適用,循環回到第一個迴圈。

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