Yerleşik döngüler

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

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.

  • Dış döngü: kod iç döngüye ulaşana kadar satır satır çalışır.:
  • Dış döngü: kod iç döngüye ulaşana kadar satır satır çalışır.:
  • Dış döngü: kod iç döngüye ulaşana kadar satır satır çalışır.

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.

  1. Create a new script in ServerScriptService adlı 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ış döngü
    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 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.

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

  2. 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 = 4
    local CUBE_SIZE = 2
  3. Kullanarak bir tek kare küp oluşturan yerel bir işlev ekleyin kullanarak >.


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
    -- Tek bir küp 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, 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 = currentColor
    end
  5. Son 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 = currentColor
    cube.Parent = workspace
    end

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.

  1. İç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ş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. İş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 = currentColor
    cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
    cube.Parent = workspace
    end

İç 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.

  1. 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 eder
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    end
  2. Yü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 do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    end
    end
  3. ikinci 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 eder
    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 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 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ı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:

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.