Yerleştirme döngüleri, görevleri toplu olarak tekrarlamanıza izin verir. Örneğin, altı kek paketini pişirmek veya iki takımdaki oyunculara silah ataması yapmak.
Nested döngüler nasıl çalışır
Döngüler üst üste geçtiğinde, senaryolar bir sonraki döngüye ulaşana kadar satır satır gider.İç döngü dış döngüye geri dönmeden önce koşul karşılandığına kadar çalışacaktır.
Yerleşik döngü mantığı
Aşağıdaki diyagram, bir döngünün adımlarını gösterir.
| ![]() |
Yerleşik döngü örneği
İç içe geçmiş döngüler biraz soyut görünebilir, bu yüzden bir görsel örnek yardımcı olabilir.Bu egzersiz için, örnek bir senaryoyu kopyalayıp yapıştırın ve bunu Studio'da çalıştırın.Bu senaryo parça kuleleri oluşturacaktır.Dış döngü, yapılacak kaç parçayı kontrol edecek, iç döngü ise gerçek parti oluşturacak.
Create a new script in ServerScriptService adlı yeni bir senaryo oluşturun. Aşağıdaki kodu kopyalayın.
local numberOfBatches = 7local partsPerBatch = 5local partsMade = 0-- Tek bir küp oluştururlocal 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-- Dış döngüfor 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))-- İç döngüfor 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)endKod, farklı bir renkli parça grubu oluşturduğunu izleyin.Bir dizi geçtikten sonra, 2 saniye boyunca duracak.Dış döngüdeki yazım ifadesi, bitmiş iç döngü başına sadece bir kez çalışacaktır.
Döngü kulesine gömülü
Her döngü kendi kod setine sahiptir, bu nedenle farklı görevler için sorumlu olabilir.Geriye dönük döngülerin yapabileceği bir şey, bir nesnenin oluştuğu yerin yerini değiştirerek bir kuleyi bu videodaki gibi oluşturmaktır.Genişlik, uzunluk ve yükseklik boyunca kübenin oluştuğu yeri kontrol etmek için her biri farklı üç döngü var.
Küp yapıcı kodu yazın
İç içe geçmiş döngüler uygulamak için, küplerden bir kule oluşturan bir senaryo yapacaksınız.Küp kulesi senaryosu için, önce tek bir küp oluşturan bir işlev kodlayın.Kule bu işlevi tekrar tekrar çağırarak inşa edilecektir.
Senaryoyu kurun
Küp kulesi senaryosu için, önce tek bir küp oluşturan bir işlev kodlayın. Kule, bu işlevi tekrar tekrar çağırarak inşa edilecektir.
Silin Parça Yapıcı kodunu veya devre dışı bırakın (skript özelliklerinde, Kapalı'yı kontrol edin).Bunu yapmazsanız, aynı anda aynı dünyaparçalar yapan iki senaryo olacaktır.
Kule Yapıcı adlı yeni bir senaryo oluşturun. Üstte kule boyutu ve küp boyutu için değişkenler ekleyin.
local TOWER_SIZE = 4local CUBE_SIZE = 2Kullanarak bir tek kare küp oluşturan yerel bir işlev ekleyin kullanarak >.
local TOWER_SIZE = 4local CUBE_SIZE = 2-- Tek bir küp oluştururlocal function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)endKübenin rengini, yerleşik döngülerde güncellenecek bir değişken olarak ayarlayın.
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorendSon olarak, ebeveyn yeni kübü çalışma alanına ekledi, böylece görünür.
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.Parent = workspaceend
Farklı yönlerde oluşturun
Bir kule oluşturmak için, her yeni kübenin X, Y, Z özelliklerini ayarlayarak belirli noktalarda küpler üretin. X ve Z yan yana. Y yukarı ve aşağıdadır.
İçinde makeCube() , spawnX , spawnY ve spawnZ için parametre ekleyin. Bu sayılar her yeni kübenin oluşturulma yerini ayarlayacaktır.
-- Tek bir küp oluştururlocal function makeCube(spawnX, spawnY, spawnZ)local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.Parent = workspaceendİşlevin içinde, kübenin CFrame özelliğini spawnX , spawnY , spawnZ parametlerini kullanarak yeni bir CFrame'a ayarlayın.
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
İç içe geçmiş döngülerle oluşturun
Senaryo toplamda üç döngüye sahip olacak, biri kule uzunluğu, genişliği ve yüksekliği için.Yukarı doğru hareket etmeden önce bütün bir katı bitirmek için, ilk, en uzak döngüde Y koordinatını ayarlayarak başlayın.
makeCube() işlevinin altında, her kübün nasıl yüksek olduğunu ayarlayan bir döngü oluşturun .
- Kontrol değişkeni : heightIndex = 1
- Son nokta : TOWER_SIZE
- Döngünün içinde, ekleyin: yerel spawnY = (yükseklik indeksi - 1) * CUBE_SIZE
-- Kule inşa ederfor heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEendYükseklik için ilk döngü bitince, ikincisinde başlayın.İlk döngü içinde, kübü tura boyunca yerleştirmek için yeni bir döngü ekleyin.
- Kontrol değişkeni : uzunlukIndex = 1
- Son nokta : TOWER_SIZE
- Bu döngünün içinde ekleyin: yerel spawnX = uzunlukIndex * CUBE_SIZE
for heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEfor lengthIndex = 1, TOWER_SIZE dolocal spawnX = lengthIndex * CUBE_SIZEendendikinci döngüsünün içinde, kule genişliği için bir üçüncü döngü ekleyin.Bu son döngüde, makeCube() 'yi arayın ve X,Y, Z parametlerini geçirin.
- Kontrol değişkeni : widthIndex = 1
- Son nokta : TOWER_SIZE
- Döngünün içinde ekleyin:
- local spawnZ = widthIndex * CUBE_SIZE
- makeCube(spawnX, spawnY, spawnZ)
- Kuleun inşa edilmesini izleyebilmeniz için 0.25 saniye bekleme süresi.
-- Kule inşa ederfor 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)endendendHer katta rastgele bir renk olması için, yeni bir kat oluşturduğunuz aynı döngüde currentColor rastgele RGB sayılara değiştirin.
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)endendendProjeyi çalıştırın ve Çıktı penceresinde herhangi bir hata olmadan bir tam kule oluşturulduğunu görmeyi bekleyin.
Opsiyonel zorluklar
Aşağıda, çözüme farklı şekillerde giren yerleşik döngüler kullanan farklı kendi kendine yönlü zorluklar bulunmaktadır. Çözüme bakmadan önce kendi başına kod yazın.
Kaybolan parçalar
Kule inşa edildiğinde, parçaların soldan sağa transparan olarak kaybolmasına izin verin.

Kod çözümü aşağıdadır.
local TOWER_SIZE = 6
local CUBE_SIZE = 2
-- Tek bir küp oluşturur
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 -- Transparansiyi ayarlar
cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
cube.Parent = workspace
end
-- Kule inşa eder
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 --Her döngü 0'dan başlayarak güncellenir
for widthIndex = 1, TOWER_SIZE do
local spawnZ = widthIndex * CUBE_SIZE
makeCube(spawnX, spawnY, spawnZ)
task.wait(0.05)
end
end
end
Nesneleri yağdır
Parçalar yerine, gerçek bir nesneyi oluşturmayı deneyin. Buradaki örnek kekleri kullandı.
Kendi sahip ol, yapabileceğinizi görün:
- Temel parçalardan bir nesne oluşturun. Nesnenin parçalara ayrılmadığından emin olmak için tüm parçaları birleştirin.
- Nesneyi ServerStorage'a yerleştir
- Parça yerine nesneyi kullanmak için İç içe geçmiş döngü örneğinde bulunan ParçaYapıcı'yı değiştirin.
Burada bir örnek gösterilir.
Kekler kullanarak bir kod çözümü dahil edildi.
local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
--Tek bir kek yapar
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
-- Dış döngü
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))
-- İç döngü
for cupcakeNumber = 1, cupcakesPerBatch do
makeCupcake()
print("Inner loop: cupcake " .. cupcakeNumber)
-- Pişmiş iz muffinleri
cupcakesBaked += 1
task.wait(0.5)
end
print("Bottom outer loop: " .. cupcakesBaked .. " cupcakes baked so far.")
end
Özet
Daha karmaşık görevleri gerçekleştirmek için, kodlama uzmanları birden fazla döngü ve hatta farklı türde döngüleri birleştirmenin yararlı olduğunu bulacaklar.Tüm döngüler üst üste geçebilir, yani bir döngü diğerinin içinde bulunur.İç içe geçmiş döngüler diğer herhangi bir döngüyle aynı mantığı izler.İlk, en dışta döngüde başlar, içerideki döngülerden görevler yürütür ve ardından uygulanabilirse ilk döngüye geri döner.