Çift Kodlu Yapı

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Nesting çözgüleri, görevleri batılarda tekrarlamanızı sağlar. Örneğin, altı cupcake'in üç tane yapımını veya iki takımda oyunculara silahlar atmanızı sağlayan görevleri tekrarlayın.

Nestlenmiş Loop'lar Nasıl Çalışır

Köpeler kesiştirildiğinde, kodlar bir sonraki köpere kadar satır satıra yürür. Dahili köpürme, dış köpürmeye geri dönmeden önce koşulunu yerine getirir.

Ağız içi Logik

Aşağıdaki grafik, bir döngünün adımlarını gösterir.

  • Dış loop: kod satır satıra içine kadar çalışır.
  • Dış loop: kod satır satır içine kadar çalışır.
  • Dış loop: kod satır satır içine kadar çalışır.

Nested Loop Örneği

Geriyeşil循环ler biraz抽象 görünebilir, bu yüzden bir görsel örneği yardımcı olabilir. Bu öğretim için, bir örnek skripti kopyalayıp Studio'da çalıştırın. Bu kod, küçük kümeler oluşturacak. Dış loop, yapılacak kümelerin sayısını kontrol edecek, iç loop ise asıl sırası oluşturacak.

  1. ServerScriptService adındaki PartMaker isimli yeni bir senaryo oluşturun. Aşağıdaki kodu kopyalayın.


    local numberOfBatches = 7
    local partsPerBatch = 5
    local partsMade = 0
    -- Tek bir küp oluşturur
    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
    -- Dış kayıt
    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))
    -- İç döngü
    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. Kod, farklı bir renkli parça oluşturur. Bir bileşenin bir setini tamamladıktan sonra, 2 saniye boyunca durur. Dış döngüdeki bir print ifadesi, bitirilmiş her iç döngü için sadece bir kez çalışır.

Loop Tower için Ağaçlandırılmış

Her bir döngünün kendi kod setine sahiptir, böylece farklı görevler için sorumludur. Bir döngünün içine yapılan bir şey, bir kübeyi bu video gibi bir kule oluşturmak için yerleştirmenin yerini değiştirebilir. Bu döngülerin üç tanesi vardır, her birinde yerleştirmenin genişliği, yüksekliği ve yüksekliği ü

Bir Küp Oluşturucu Skripti Yazılıyor

Çağrı küpleri oluşturan bir kule yapmak için bir kod yapacaksınız. Küme kule yanıtı için ilk olarak bir küp oluşturan bir işlevi yapacaksınız. Kule, bu işlevi tekrar çağırerek oluşturulacaktır.

Script'i ayarlama

Küp kulesi kodu, tek bir küp oluşturan ilk kodu içerir. Kule bu işlevi tekrar çağırerek inşa edilir.

  1. Sil PartMaker kısmını sil veya devre dışı bırak (skript özelliklerinde, Devre dışı bırak’ı kontrol et). Eğer yapmazsanız, aynı dünyaaynı anda iki kısım yapacak iki kısım yapacak iki kısım yapacak iki kısım yapacak iki kısım yapacak iki kısım yapacak iki kısım yapacak iki kısım yapacak iki kısım yapacak iki kısım y

  2. TowerBuilder adında yeni bir senaryo oluşturun. Küme boyutu ve küme boyutu için ortadaki çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çeşit çe


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
  3. makeCube() adında bir yerel işlev ekler, CUBE_SIZE kullanarak tek bir küp oluşturur.


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
    -- Bireysel küpler oluşturur
    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    end
  4. Kübenin rengini ağızlama döngülerinde 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 = currentColor
    end
  5. Son olarak, ebeveyn yeni kübü alanına ebeveyn olarak kaydedin, 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 = currentColor
    cube.Parent = workspace
    end

Farklı Yönlerde Oluşturulması

Bir kule oluşturmak için, her yeni kubenin X, Y ve Z özelliklerini ayarlayarak belirli noktalarda küpler oluşturun. X ve Z yan yana karşı. Y yukarı ve aşağı.

  1. In makeCube() , spawnX , spawnY ve 1> spawnZ1> . Bu sayılar her yeni kübenin yerini ayarlar.


    -- Bireysel küpler 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.Parent = workspace
    end
  2. İşlev içinde, kubenin CFrame özelliğini yeni bir CFrame kullanarak spawnX, spawnY, spawnZ parametreleriyle yeniden 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 = currentColor
    cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
    cube.Parent = workspace
    end

Nestleme ile Oluşturulan

Kriptin üç tane toplamLoop'u olacak, her biri kule uzunluğu, genişliği ve yüksekliği için. Yükselmeden önce bir katlığın tamamlanması için ilk dış döngüde Y koordinatını ayarlayın.

  1. makeCube() işlevi altında, her kübenin oluşturulması için bir döngü oluşturun.

    • Kontrol Değişkeni : heightIndex = 1
    • Son nokta : TOWER_SIZE
    • Döngü içinde, ekleyin: yerel oluşturmaY = (yükseklikIndex - 1) * CUBE_SIZE

    -- Kule inşa edilir
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    end
  2. Yüksekliğin ilk döngüsü tamamlandığında, ikinci döngüyü başlatın. İlk döngü içinde, kübün kule boyunca nereye yerleştirileceğini yeni ekleyin.

    • Kontrol değişkeni : uzunlukIndex = 1
    • Son nokta : TOWER_SIZE
    • Bu döngü içine eklemek: yerel spawnX = CUBE_SIZE * uzunlukIndex

    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. İçindeki ikinci döngü içinde, kule genişliği için bir üçüncüsünü ekleyin. Bu son döngüde, 1> makeCube()1> adlı kullanıcıyı çağırın ve X, Y ve Z parametrelerini geçin.

    • Kontrol Değişkeni : widthIndex = 1
    • Son nokta : TOWER_SIZE
    • Döngü içine eklemek:
      • local spawnZ = widthIndex * CUBE_SIZE
      • makeCube(spawnX, spawnY, spawnZ)
      • Kule inşa edilmesini izleyebilmeniz için 0.25 saniye bekleme süresi.

    -- Kule inşa edilir
    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. Her katın rastgele bir renk olması için, yeni bir kat oluşturduğunuz aynı döngüdeki rastgele currentColor sayılarını değiştirin.


    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. Projeyi çalıştır ve çıkış penceresindeki hiçbir hata olmadan bir tam kule oluşturulduğunu görmeyi bekleyin.

Opcional Görevler

Aşağıda, gösterge döngülerini farklı şekillerde kullanan farklı özellikli görevler vardır. Çözümü görmek için kendiniz kod yazın.

Parçaların Solması

Kule inşa edildiğinde, parçaların birbirinden sola kaydırılmasıyla görünürlük kaybına izin verin.

Kod çözümü aşağıdadır.


local TOWER_SIZE = 6
local CUBE_SIZE = 2
-- Bireysel küpler 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 -- Şeffaflığı ayarlar
cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
cube.Parent = workspace
end
-- Kule inşa edilir
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 0'dan başlayan bir döngüyü günceller
for widthIndex = 1, TOWER_SIZE do
local spawnZ = widthIndex * CUBE_SIZE
makeCube(spawnX, spawnY, spawnZ)
task.wait(0.05)
end
end
end

Yağmur Objeleri

Parçalar yerine, gerçek bir nesneyi oluşturmaya çalışın. Buradaki örnek kupa kekleri kullandı.

Kendiniz sahip ol, yapabilir misiniz:

  • Ana parçalardan bir nesne oluşturun. Tüm parçaları birleştirin, böylece nesne düşmez.
  • Nesneyi ServerStorage'a yerleştir
  • Parça yerine nesneleri kullanmak için Nested Loop Example 'deki Parça Yapıcı'yı modifiye edin.

Birörnek gösterilmiştir.

Cupcake'leri kullanan bir kod çözümü içerilmiştir.


local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
--Tek bir cupcake 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ış kayıt
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)
-- Pastırma muffinleri pişirildi
cupcakesBaked += 1
task.wait(0.5)
end
print("Bottom outer loop: " .. cupcakesBaked .. " cupcakes baked so far.")
end

Özet

Daha karmaşık görevleri tamamlamak için, kodlayıcılar birden fazla tekrar kullanmak, birden fazla türde tekrar kullanmak ve hatta farklı türde tekrar kullanmak yararlı olacağını bulacaktır. Tüm tekrarlar altında, bir tekrar içinde başka bir tekrar bulunur ve ardından ilk tekrara geri döner. Uygulanabilirse, ilk tekrarı