雙層鏈子

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

nest 允許您重複任務在批量中重複。例如,烤三個六分子蛋糕的批量,或分配武器給兩個團隊的玩家。

如何讓子循環執行

當循環疊加時,指令會一行一行地執行,直到它達到下一個循環。內部循環將在滿足條件後執行,直到返回外部循環。

雙層循環論理

下圖顯示一個循環的步驟。

  • 外部鏈子:代碼會一行一行地執行直到達到內部鏈子。
  • 外部鏈子:代碼會一行一行地執行直到達到內部鏈子。
  • 外部鏈子:代碼會一行一行地執行直到達到內部鏈子。
  • >

雙層循環範例

雙重子線可能聽起來有點抽象,因此一個視覺示例可能很有協助。對於此示例,複製並貼入一個示例腳本,並在 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("Top outer loop: part batch " .. partBatch)
    currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
    -- 內部循環
    for partNumber = 1, partsPerBatch do
    createPart()
    print("Inner loop: part " .. partNumber)
    partsMade += 1
    task.wait(0.5)
    end
    print("Bottom outer loop: " .. partsMade .. " parts made so far.")
    task.wait(2)
    end
  2. 觀看腳本會生成一個不同的批量彩色零件。 在完成一個批量之後,它會暫停 2 秒。 外部循環中的打印聲明只會在完成內部循環後執行一次。

雙層螺旋塔

每個循環都有自己的程式碼集,因此可以負責不同的任務。一個讓陣列中重複的方法是將程式碼變更以將對象生成的位置變更為圓形塔,像這個視頻中的一個。有三種不同的循環,分別負責控制陣列的寬度、長度和高度。

編寫方塊製造器指令碼

要練習重複循環,您將作一個生成方形體的塔的腳本。 對於方形體塔的腳指令碼,首先代碼一個生成單個方形體的腳本。塔將被建造,重複地呼叫此腳本。

設置指令碼

對於方塊塔指令碼,首先要先定義一個方塊塔。方塊塔將通過重複此方塊塔來建造。

  1. 刪除 零件製造器指令或停用它 (在指令欄中, 查看 已禁用). 如果你沒有, 將會在同一個空間方有兩個製造零件的指令。

  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. 最後, parent 新的方塊到工作區,讓它看起來。


    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() 中,為 spawnXspawnY 和 1> spawnZ1> 添加參數。這些數字將設置每個新的方塊的生成地點。


    -- 建立個別的方塊
    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. 在函數中,將 Cube 的 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. 高度第一個循環結束時,開始第二個。在第一個循環內,添加新的循環以放置方塊在塔的長度上。

    • 控制變數 : 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. 第二個 循環內,增加 第三個 對循環的塔 寬度 的內部循環。在此最終循環中,呼叫1> makeCube()1>並在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("Top outer loop: cupcake batch " .. 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("Inner loop: cupcake " .. cupcakeNumber)
-- 烤麵包捲
cupcakesBaked += 1
task.wait(0.5)
end
print("Bottom outer loop: " .. cupcakesBaked .. " cupcakes baked so far.")
end

摘要

為了完成更複雜的任務,程式員會發現它有助於結合多個循環,甚至是不同類型的循環。所有循環都可以被捲積,這意味著一個循環內的一個循環。捲積的循環會跟其他任何類型的循環運行任務,然後再回到第一個循環,如果適用。