Menyusun loop memungkinkan Anda untuk mengulangi tugas dalam kelompok. Contohnya, memanggang tiga kelompok enam cupcake, atau memberikan senjata kepada pemain di dua tim.
Cara kerja loop bersarang
Ketika loop bersarang, skrip berjalan baris demi baris hingga mencapai loop berikutnya. Loop dalam akan berjalan sampai kondisinya terpenuhi sebelum kembali ke loop luar.
Logika loop bersarang
Diagram berikut menunjukkan langkah-langkah yang diambil oleh sebuah loop.
| ![]() |
Contoh loop bersarang
Loop bersarang mungkin terlihat agak abstrak, jadi contoh visual dapat membantu. Untuk latihan ini, salin dan tempel skrip contoh dan jalankan di Studio. Skrip ini akan membuat menara bagian. Loop luar akan mengontrol berapa banyak bagian yang dibuat, sementara loop dalam akan membuat batch sebenarnya.
Buat skrip baru di ServerScriptService bernama PartMaker. Salin kode di bawah ini.
local numberOfBatches = 7local partsPerBatch = 5local partsMade = 0-- Membuat sebuah kubuslocal 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-- Loop luarfor partBatch = 1, numberOfBatches doprint("Loop luar atas: batch bagian " .. partBatch)currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))-- Loop dalamfor partNumber = 1, partsPerBatch docreatePart()print("Loop dalam: bagian " .. partNumber)partsMade += 1task.wait(0.5)endprint("Loop luar bawah: " .. partsMade .. " bagian yang telah dibuat sejauh ini.")task.wait(2)endSaksikan saat skrip memunculkan batch bagian berwarna yang berbeda. Setelah melewati satu batch, skrip akan berhenti selama 2 detik. Pernyataan print di loop luar hanya akan berjalan sekali per loop dalam yang selesai.
Menara loop for bersarang
Setiap loop memiliki set kodenya sendiri, sehingga dapat bertanggung jawab untuk tugas yang berbeda. Salah satu hal yang dapat dilakukan oleh loop bersarang adalah mengubah penempatan di mana sebuah objek muncul untuk membuat sebuah menara seperti di video ini. Ada tiga loop berbeda, masing-masing untuk mengendalikan di mana di sepanjang lebar, panjang, dan tinggi menara kubus muncul.
Buat skrip pembuat kubus
Untuk berlatih dengan loop bersarang, Anda akan membuat skrip yang membuat menara kubus. Untuk skrip menara kubus, pertama-tama buat fungsi yang memunculkan satu kubus. Menara akan dibangun dengan memanggil fungsi ini berkali-kali.
Siapkan skrip
Untuk skrip menara kubus, pertama-tama buat fungsi yang memunculkan satu kubus. Menara akan dibangun dengan memanggil fungsi ini berkali-kali.
Hapus skrip PartMaker atau nonaktifkan (dalam properti skrip, centang Disabeled). Jika tidak, akan ada dua skrip yang membuat bagian secara bersamaan di tempat yang sama.
Buat skrip baru bernama TowerBuilder. Tambahkan variabel untuk ukuran menara dan ukuran kubus di bagian atas.
local TOWER_SIZE = 4local CUBE_SIZE = 2Tambahkan fungsi lokal bernama makeCube() yang membuat kubus persegi tunggal menggunakan CUBE_SIZE.
local TOWER_SIZE = 4local CUBE_SIZE = 2-- Membuat kubus individulocal function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)endAtur warna kubus ke sebuah variabel yang akan diperbarui dalam loop bersarang.
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorendTerakhir, parent kubus baru ke workspace agar ia muncul.
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.Parent = workspaceend
Memunculkan dalam arah yang berbeda
Untuk membuat menara, munculkan kubus di titik-titik tertentu dengan mengatur properti X, Y, Z dari setiap kubus baru. X dan Z adalah sisi ke sisi. Y adalah atas dan bawah.
Dalam makeCube(), tambahkan parameter untuk spawnX, spawnY, dan spawnZ. Angka-angka ini akan mengatur lokasi spawn setiap kubus baru.
-- Membuat kubus individulocal function makeCube(spawnX, spawnY, spawnZ)local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.Parent = workspaceendDi dalam fungsi, atur properti CFrame kubus ke sebuah CFrame baru menggunakan parameter spawnX, spawnY, spawnZ.
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
Memunculkan dengan loop bersarang
Skrip ini akan memiliki total tiga loop, masing-masing untuk panjang, lebar, dan tinggi menara. Untuk menyelesaikan seluruh lantai sebelum bergerak ke atas, mulailah dengan mengatur koordinat Y di loop pertama, yang terluar.
Di bawah fungsi makeCube(), buat loop for untuk mengatur seberapa tinggi setiap kubus muncul.
- Variabel kontrol: heightIndex = 1
- Titik akhir: TOWER_SIZE
- Di dalam loop, tambahkan: local spawnY = (heightIndex - 1) * CUBE_SIZE
-- Membangun menarafor heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEendDengan loop pertama untuk tinggi selesai, mulai pada yang kedua. Di dalam loop for pertama, tambahkan loop for baru untuk di mana menempatkan kubus sepanjang panjang menara.
- Variabel kontrol: lengthIndex = 1
- Titik akhir: TOWER_SIZE
- Di dalam loop itu tambahkan: local spawnX = lengthIndex * CUBE_SIZE
for heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEfor lengthIndex = 1, TOWER_SIZE dolocal spawnX = lengthIndex * CUBE_SIZEendendDi dalam loop kedua, tambahkan loop for ketiga untuk lebar menara. Dalam loop terakhir ini, panggil fungsi makeCube() dan masukkan parameter X, Y, Z.
- Variabel kontrol: widthIndex = 1
- Titik akhir: TOWER_SIZE
- Di dalam loop tambahkan:
- local spawnZ = widthIndex * CUBE_SIZE
- makeCube(spawnX, spawnY, spawnZ)
- Waktu tunggu 0.25 agar Anda dapat melihat menara dibangun.
-- Membangun menarafor 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)endendendAgar setiap lantai memiliki warna acak, ubah currentColor ke angka RGB acak di loop yang sama di mana Anda membuat lantai baru.
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)endendendJalankan proyek dan tunggu untuk melihat bahwa sebuah menara penuh telah dibuat tanpa kesalahan di jendela Output.
Tantangan opsional
Berikut adalah berbagai tantangan mandiri yang menggunakan loop bersarang dengan cara yang berbeda. Cobalah untuk coding sendiri sebelum melihat solusi.
Bagian memudar
Saat menara dibangun, buat bagian memudar dalam transparansi dari kiri ke kanan.

Solusi kode ada di bawah ini.
local TOWER_SIZE = 6
local CUBE_SIZE = 2
-- Membuat kubus individu
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 -- Mengatur transparansi
cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
cube.Parent = workspace
end
-- Membangun menara
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 -- Memperbarui setiap loop mulai dari 0
for widthIndex = 1, TOWER_SIZE do
local spawnZ = widthIndex * CUBE_SIZE
makeCube(spawnX, spawnY, spawnZ)
task.wait(0.05)
end
end
end
Turunkan objek
Alih-alih bagian, cobalah untuk memunculkan objek nyata. Contoh di sini menggunakan cupcake.
Cobalah sendiri untuk:
- Membuat objek dari bagian dasar. Pastikan untuk mengelas semua bagian bersama-sama agar objek tidak pecah.
- Meletakkan objek di ServerStorage
- Memodifikasi PartMaker yang ditemukan di Contoh Loop Bersarang untuk menggunakan objek Anda alih-alih bagian.
Sebuah contoh ditunjukkan di sini.
Solusi kode menggunakan cupcake disertakan.
local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
-- Membuat sebuah 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
-- Loop luar
for cupcakeBatch = 1, numberOfBatches do
print("Loop luar atas: batch cupcake " .. 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))
-- Loop dalam
for cupcakeNumber = 1, cupcakesPerBatch do
makeCupcake()
print("Loop dalam: cupcake " .. cupcakeNumber)
-- Melacak cupcake yang dipanggang
cupcakesBaked += 1
task.wait(0.5)
end
print("Loop luar bawah: " .. cupcakesBaked .. " cupcake yang telah dipanggang sejauh ini.")
end
Ringkasan
Untuk menyelesaikan tugas yang lebih kompleks, para pengkode akan menemukan bahwa menggabungkan beberapa loop, dan bahkan berbagai tipe loop, sangat membantu. Semua loop dapat bersarang, yang berarti bahwa satu loop berada di dalam yang lain. Loop bersarang mengikuti logika yang sama seperti loop lainnya. Ini dimulai di loop pertama yang terluar, menjalankan tugas melalui loop dalam, dan kemudian kembali ke loop pertama jika berlaku.
