Lingkaran sarang memungkinkan Anda untuk mengulangi tugas dalam batch. Misalnya, memanggang tiga batch cupcake, atau menugaskan senjata kepada pemain di dua tim.
Bagaimana loop terkait dijalankan
Ketika loop terkait, skrip pergi satu per satu sampai mencapai loop berikutnya.Lingkaran internal akan berjalan sampai kondisinya dipenuhi sebelum kembali ke lingkaran luar.
Logika loop terkait
Diagram berikut menunjukkan langkah yang diambil oleh loop.
| ![]() |
Contoh loop terkait
Lingkaran terbalik bisa tampak agak abstrak, jadi contoh visual bisa membantu.Untuk latihan ini, salin dan tempelkan skrip sampel dan jalankan di Studio.Skrip ini akan membuat menara bagian.Lingkaran luar akan mengontrol berapa banyak bagian yang harus dibuat, sementara loop dalam akan membuat batch yang sebenarnya.
Buat skrip baru di ServerScriptService bernama PartMaker. Salin kode di bawah ini.
local numberOfBatches = 7local partsPerBatch = 5local partsMade = 0-- Membuat kubus tunggallocal 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-- Lingkaran luarfor 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))-- Lingkaran dalamfor 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)endTonton saat skrip memunculkan batch berwarna berbeda.Setelah melalui satu batch, itu akan berhenti selama 2 detik.Pernyataan cetak di loop luar hanya akan berjalan satu kali per loop internal yang diselesaikan.
Diplesetkan untuk menara loop terbalik
Setiap loop memiliki kumpulan kode sendiri, sehingga bisa bertanggung jawab atas tugas yang berbeda.Satu hal yang dapat dilakukan oleh loop terpisah adalah mengubah lokasi di mana objek muncul untuk membuat menara seperti yang ada di video ini.Ada tiga loop berbeda, masing-masing satu untuk mengontrol di mana di sepanjang lebar, panjang, dan ketinggian menara kubus muncul.
Kode skrip pembuat kubus
Untuk mempraktikkan loop terkait, Anda akan membuat skrip yang membuat menara kubus.Untuk skrip menara kubus, pertama kode fungsi yang menghasilkan kubus tunggal.Menara akan dibangun dengan memanggil fungsi ini berulang kali.
Menyiapkan skrip
Untuk skrip menara kubus, pertama kode fungsi yang menghasilkan kubus tunggal. Menara akan dibangun dengan memanggil fungsi ini berulang kali.
Hapus skrip PartMaker atau nonaktifkan (dalam properti skrip, periksa Dinonaktifkan).Jika tidak, akan ada dua skrip membuat bagian pada saat yang sama 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)endTetapkan warna kubus ke variabel yang akan diperbarui dalam loop terpisah.
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorendTerakhir, orangtua kubus baru ke ruang kerja sehingga muncul.
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.Parent = workspaceend
Muncul di berbagai arah
Untuk membuat menara, hasilkan kubus di titik tertentu dengan mengatur properti X, Y, Z dari setiap kubus baru. X dan Z berdekatan. Y naik dan turun.
Di makeCube() , tambahkan parameter untuk spawnX , spawnY , dan spawnZ . Angka-angka ini akan menetapkan 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 CFrame baru menggunakan spawnX , spawnY , spawnZ parameter.
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
Muncul dengan loop terkait
Skrip akan memiliki tiga loop total, masing-masing satu untuk panjang, lebar, dan ketinggian menara.Untuk menyelesaikan seluruh lantai sebelum bergerak ke atas, mulailah dengan mengatur koordinat Y di loop pertama dan terluar.
Di bawah fungsi makeCube() , Buat loop untuk menetapkan bagaimana tinggi setiap kubus muncul.
- Variabel kontrol : heightIndex = 1
- Titik akhir : TOWER_SIZE
- Di dalam loop, tambahkan: spawnY lokal = (heightIndex - 1) * CUBE_SIZE
-- Membangun menarafor heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEendDengan loop pertama untuk ketinggian selesai, mulai di yang kedua.Di dalam loop pertama, tambahkan loop baru untuk tempat menempatkan kubus di sepanjang panjang menara.
- Variabel kontrol : lengthIndex = 1
- Titik akhir : TOWER_SIZE
- Di dalam loop itu tambahkan: spawnX lokal = 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 kedua , tambahkan ketiga untuk loop untuk menara lebar .Dalam loop terakhir ini, panggil makeCube() dan berikan 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 sehingga Anda dapat menyaksikan 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)endendendUntuk memiliki setiap lantai menjadi warna acak, ubah currentColor menjadi angka acak RGB 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 menara penuh telah dibuat tanpa kesalahan di jendela Output.
Tantangan opsional
Di bawah ini adalah tantangan berbasis diri yang berbeda yang menggunakan loop terpisah dengan cara yang berbeda. Coba dan kode sendiri sebelum melihat solusi.
Bagian memudar pergi
Saat menara dibangun, miliki bagian-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 hujan
Alih-alih bagian, coba menelurkan objek yang sebenarnya. Contoh di sini menggunakan cupcakes.
Secara memiliki, lihat apakah Anda dapat:
- Buat objek dari bagian dasar. Pastikan untuk menyambungkan semua bagian bersama-sama sehingga objek tidak terpisah
- Tempatkan objek di ServerStorage
- Modifikasi PartMaker yang ditemukan di Contoh Lingkaran Terbalik untuk menggunakan objek Anda alih-alih bagian.
Sampel ditampilkan di sini.
Solusi kode menggunakan cupcake disertakan.
local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
--Membuat satu kue mangkok
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
-- Lingkaran luar
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))
-- Lingkaran dalam
for cupcakeNumber = 1, cupcakesPerBatch do
makeCupcake()
print("Inner loop: cupcake " .. cupcakeNumber)
-- Pelacak muffin yang dibakar
cupcakesBaked += 1
task.wait(0.5)
end
print("Bottom outer loop: " .. cupcakesBaked .. " cupcakes baked so far.")
end
Singkatan
Untuk menyelesaikan tugas yang lebih kompleks, pemrogram akan menemukan berguna untuk menggabungkan beberapa loop, dan bahkan jenis loop yang berbeda.Semua loop dapat disarang, artinya satu loop berada di dalam yang lain.Lingkaran terbalik mengikuti logika yang sama dengan loop lainnya.Ini dimulai di loop pertama dan terluar, menjalankan tugas melalui loop internal, dan kemudian berkeliling kembali ke loop pertama jika berlaku.