Lingkaran terkait

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

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.

  • Lingkaran luar: kode dijalankan satu per satu sampai mencapai lingkaran dalam.:
  • Lingkaran luar: kode dijalankan satu per satu sampai mencapai lingkaran dalam.:
  • Lingkaran luar: kode dijalankan satu per satu sampai mencapai lingkaran dalam.

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.

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


    local numberOfBatches = 7
    local partsPerBatch = 5
    local partsMade = 0
    -- Membuat kubus tunggal
    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
    -- Lingkaran luar
    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))
    -- Lingkaran dalam
    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. Tonton 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.

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

  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. Tetapkan 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 = currentColor
    end
  5. Terakhir, 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 = currentColor
    cube.Parent = workspace
    end

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.

  1. Di makeCube() , tambahkan parameter untuk spawnX , spawnY , dan spawnZ . Angka-angka ini akan menetapkan 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 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 = currentColor
    cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
    cube.Parent = workspace
    end

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.

  1. 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 menara
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    end
  2. Dengan 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 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 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 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. Untuk 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 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 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.