Loop Bersarang

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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.

  • Loop luar: kode berjalan baris demi baris sampai mencapai loop dalam.
  • Loop luar: kode berjalan baris demi baris sampai mencapai loop dalam.
  • Loop luar: kode berjalan baris demi baris sampai mencapai loop dalam.

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.

  1. Buat skrip baru di ServerScriptService bernama PartMaker. Salin kode di bawah ini.


    local numberOfBatches = 7
    local partsPerBatch = 5
    local partsMade = 0
    -- Membuat sebuah kubus
    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
    -- Loop luar
    for partBatch = 1, numberOfBatches do
    print("Loop luar atas: batch bagian " .. partBatch)
    currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
    -- Loop dalam
    for partNumber = 1, partsPerBatch do
    createPart()
    print("Loop dalam: bagian " .. partNumber)
    partsMade += 1
    task.wait(0.5)
    end
    print("Loop luar bawah: " .. partsMade .. " bagian yang telah dibuat sejauh ini.")
    task.wait(2)
    end
  2. Saksikan 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.

  1. 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.

  2. Buat skrip baru bernama TowerBuilder. Tambahkan variabel untuk ukuran menara dan ukuran kubus di bagian atas.


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
  3. Tambahkan fungsi lokal bernama makeCube() yang membuat kubus persegi tunggal menggunakan CUBE_SIZE.


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
    -- Membuat kubus individu
    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    end
  4. Atur 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 = currentColor
    end
  5. Terakhir, 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 = currentColor
    cube.Parent = workspace
    end

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.

  1. Dalam makeCube(), tambahkan parameter untuk spawnX, spawnY, dan spawnZ. Angka-angka ini akan mengatur lokasi spawn setiap kubus baru.


    -- 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.Parent = workspace
    end
  2. Di 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 = currentColor
    cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
    cube.Parent = workspace
    end

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.

  1. 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 menara
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    end
  2. Dengan 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 do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    end
    end
  3. Di 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 menara
    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. Agar 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 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. Jalankan 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.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.