Nesting các lần lặp cho phép bạn lặp lại các nhiệm vụ trong các lô. Ví dụ, việc nướng ba lần lô sáu các cupcake hoặc giao vũ khí cho người chơi trên hai đội.
Làm thế nào để chạy các lần lượt bị gấp
Khi các lỗ hợp chồng lên nhau, các script sẽ đi từ dòng này đến dòng kia cho đến khi nó đạt đến lỗ hợp chồng tiếp theo. Lỗ hợp nội bên sẽ chạy cho đến khi nó đạt được điều kiện trước khi quay về lỗ hợp ngoài.
Tập hợp điều khiển lò xo
Hình ảnh dưới đây cho thấy các bước một lượt lặp.
Loop ngoài: mã chạy dòng một dòng cho đến khi nó đạt đến loop ngoài. Loop ngoài: mã chạy dòng một dòng cho đến khi nó đạt đến loop ngoài. Loop ngoài: mã chạy dòng một dòng cho đến khi nó đạt |
Ví dụ về vòng lặp tổng
Các lỗ lặp có thể có vẻ như một chút xa xôi, vì vậy một ví dụ thị giác có thể giúp đỡ. Đối với bài tập này, sao chép và dán một mẫu script và chạy nó trong Studio. Skript này sẽ tạo ra các tháp của các bộ phận. Vòng lặp bên ngoài sẽ điều khiển số lượng các bộ phận để
Tạo một script mới ở ServerScriptService có tên là PartMaker. Sao chép mã bên dưới.
local numberOfBatches = 7local partsPerBatch = 5local partsMade = 0-- Tạo một khối khốilocal function createPart()local part = Instance.new("Part")part.Size = Vector3.new(2, 2, 2)part.CFrame = CFrame.new(20, 0, 20)part.Color = currentColorpart.Parent = workspaceend-- Vòng lặp bên ngoàifor partBatch = 1, numberOfBatches doprint("Top outer loop: part batch " .. partBatch)currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))-- Vòng lặp bên trongfor partNumber = 1, partsPerBatch docreatePart()print("Inner loop: part " .. partNumber)partsMade += 1task.wait(0.5)endprint("Bottom outer loop: " .. partsMade .. " parts made so far.")task.wait(2)endXem như script tạo ra một lô các bộ phận màu khác nhau. Sau khi đi qua một lô, nó sẽ tạm dừng trong 2 giây. Phát biểu in ấn trong lượt in ngoài sẽ chạy chỉ một lần mỗi lần hoàn thành lượt in bên trong.
Lồng cho tháp tròn
Mỗi lần lặp có một bộ mãriêng, vì vậy có thể chịu trách nhiệm cho các nhiệm vụ khác nhau. Một điều mà lỗ lưới lớp có thể làm là thay đổi vị trí mà một ô bù đổi xuất hiện để tạo một tháp giống như thứ này trong video. Có ba lỗ lưới khác nhau, mộ
Lập trình một Cube Maker Script
Để luyện tập các lỗ lặp lồng, bạn sẽ tạo một script tạo một tháp của các khối. Đối với script tháp của khối, bạn sẽ đầu tiên code một hàm tạo một khối duy nhất. Tháp sẽ được xây dựng bằng cách gọi lại liên tục hàm này.
Cài đặt Script
Đối với kịch bản của các tháp hình, trước tiên, hãy code một chức năng để tạo một cái khối hình. Kịch bản sẽ được xây dựng bằng cách gọi lại chức năng này nhiều lần.
Xóa kịch bản PartMaker hoặc vô hiệu hóa nó (trong các tính năng kịch bản, hãy kiểm tra Bị tắt). Nếu bạn không, sẽ có hai kịch bản làm các bộ phận tại cùng một thời điểm tại cùng một địa điểm.
Tạo một mã mới có tên là TowerBuilder. Thêm biến đổi cho kích thước của tháp và kích thước của cube ở trên cùng.
local TOWER_SIZE = 4local CUBE_SIZE = 2Thêm một chức năng địa phương có tên là makeCube() để tạo một khối khối hình họa đơn giản bằng cách sử dụng CUBE_SIZE .
local TOWER_SIZE = 4local CUBE_SIZE = 2-- Tạo các khối lập phương riêng lẻlocal function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)endĐặt màu của cube thành một biến đổi sẽ được cập nhật trong các lần lặp.
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorendCuối cùng, cha cục khối mới vàoWorkspace để xem nó.
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.Parent = workspaceend
Xuất hiện ở các hướng khác nhau
Để tạo một tháp, tạo các khối nào ở các vị trí cụ thể bằng cách cài đặt các thuộc tính X, Y, Z của mỗi khối mới. X và Z ở bên nhau. Y lên và xuống.
Trong makeCube() , thêm các biến cho spawnX , spawnY và 1> spawnZ1> . Các số này sẽ đặt mỗi cái cube mới.
-- Tạo các khối lập phương riêng lẻlocal function makeCube(spawnX, spawnY, spawnZ)local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.Parent = workspaceendTrong chức năng, set các thuộc tính CFrame của cube to một CFrame mới bằng cách sử dụng spawnX, spawnY, spawnZ parameters.
local function makeCube(spawnX, spawnY, spawnZ)local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)cube.Parent = workspaceend
Tạo với Nested Loops
Script sẽ có ba lần lặp tổng, một lần cho chiều dài, chiều rộng và chiều cao của tháp. Để hoàn thành một toàn bộ sàn trước khi di chuyển lên trên, bắt đầu với việc cài đặt Y coordinate ở lần thứ nhất, lần cuối cùng.
Dưới hàm makeCube(), Tạo một for lặp để thiết lập cách cao mỗi cube spawns.
- Điều khiển biến : heightIndex = 1
- Điểm cuối : TOWER_SIZE
- Trong vòng lặp, thêm: local spawnY = ( heightIndex - 1) * CUBE_SIZE
-- Xây dựng thápfor heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEendVới lần lượt đầu tiên cho chiều cao xong, bắt đầu ở lần thứ hai. Trong lần lượt đầu tiên cho chiều cao, thêm một lần lượt mới cho chiều cao để đặt cục khối trên chiều dài của tháp.
- Điều khiển biến hệ số nhiệm vụ : lengthIndex = 1
- Điểm cuối : TOWER_SIZE
- Trong vòng lặp đó, thêm: local spawnX = lengthIndex * CUBE_SIZE
for heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEfor lengthIndex = 1, TOWER_SIZE dolocal spawnX = lengthIndex * CUBE_SIZEendendTrong vòng lặp thứ hai, hãy thêm một thứ ba cho vòng lặp cho tháp chiều rộng. Trong vòng lặp cuối cùng này, gọi makeCube() và truyền các biến X, Y, Z.
- Điều khiển biến : widthIndex = 1
- Điểm cuối : TOWER_SIZE
- Trong loop thêm:
- local spawnZ = widthIndex * CUBE_SIZE
- makeCube(spawnX, spawnY, spawnZ)
- Một thời gian chờ 0,25 giây để bạn có thể xem tháp được xây dựng.
-- Xây dựng thápfor heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEfor lengthIndex = 1, TOWER_SIZE dolocal spawnX = lengthIndex * CUBE_SIZEfor widthIndex = 1, TOWER_SIZE dolocal spawnZ = widthIndex * CUBE_SIZEmakeCube(spawnX, spawnY, spawnZ)task.wait(0.25)endendendĐể mỗi tầng hầm là một màu ngẫu nhiên, thay currentColor thành một số ngẫu nhiên RGB trong cùng một lượt trong mà bạn tạo một tầng hầm mới.
for heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEcurrentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))for lengthIndex = 1, TOWER_SIZE dolocal spawnX = lengthIndex * CUBE_SIZEfor widthIndex = 1, TOWER_SIZE dolocal spawnZ = widthIndex * CUBE_SIZEmakeCube(spawnX, spawnY, spawnZ)task.wait(0.25)endendendKhởi chạy dự án và đợi để xem thấy rằng một tháp đầy đủ đã được tạo mà không có bất kỳ lỗi nào trong Cửa sổ Thoát.
Thử thách Ops
Dưới đây là các thử thách tự hướng dẫn khác nhau sử dụng các lượt lặp lớp trong các cách khác nhau. Hãy thử và code trên chính mình trước khi xem giải pháp.
Đổi màu Parts
Khi tháp được xây dựng, hãy để các bộ phận biến mất trong suốt từ bên trái đến bên phải.
Giải pháp mã là dưới đây.
local TOWER_SIZE = 6
local CUBE_SIZE = 2
-- Tạo các khối lập phương riêng lẻ
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 -- Cài đặt độ trong suốt
cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
cube.Parent = workspace
end
-- Xây dựng tháp
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 --Cập nhật mọi vòng bắt đầu tại 0
for widthIndex = 1, TOWER_SIZE do
local spawnZ = widthIndex * CUBE_SIZE
makeCube(spawnX, spawnY, spawnZ)
task.wait(0.05)
end
end
end
Mưa xuống đối tượng
Thay vì các bộ phận, hãy thử tạo một đối tượng thực tế. Ví dụ ở đây sử dụng các bánh cupcake.
Bằng sở hữuchỉ bạn, xem xét nếu bạn có thể:
- Tạo một đối tượng từ các bộ phận cơ bản. Đảm bảo rằng tất cả các bộ phận được liên kết với nhau để đối tượng không bị rơi ra.
- Đặt mục tài vào ServerStorage
- Điều chỉnh PartMaker được tìm thấy trong Nested Loop Example để sử dụng object của bạn thay vì các bộ phận.
Một ví dụ được hiển thị ở đây.
Một giải pháp mã bằng cách sử dụng cupcakes được bao gồm.
local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
--Làm một chiếc bánh cupcake
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
-- Vòng lặp bên ngoài
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))
-- Vòng lặp bên trong
for cupcakeNumber = 1, cupcakesPerBatch do
makeCupcake()
print("Inner loop: cupcake " .. cupcakeNumber)
-- Bánh muffin đường đua
cupcakesBaked += 1
task.wait(0.5)
end
print("Bottom outer loop: " .. cupcakesBaked .. " cupcakes baked so far.")
end
Tổng kết
Để hoàn thành các tác vụ phức tạp hơn, các nhà lập trình sẽ tìm thấy nó hữu ích để kết hợp nhiều lần, và thậm chí các loại lần lượt khác nhau của lần lượt. Tất cả các lần lượt có thể được gấp nhưng có thể được gấp nh