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.
|
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.
ServerScriptService adındaki PartMaker isimli 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ış kayıtfor 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 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.
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
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 = 4local CUBE_SIZE = 2makeCube() adında bir yerel işlev ekler, CUBE_SIZE kullanarak tek bir küp oluşturur.
local TOWER_SIZE = 4local CUBE_SIZE = 2-- Bireysel küpler oluştururlocal function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)endKü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 = currentColorendSon 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 = currentColorcube.Parent = workspaceend
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ğı.
In makeCube() , spawnX , spawnY ve 1> spawnZ1> . Bu sayılar her yeni kübenin yerini ayarlar.
-- Bireysel küpler 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İş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 = currentColorcube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)cube.Parent = workspaceend
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.
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 edilirfor heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEendYü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 dolocal spawnY = (heightIndex - 1) * CUBE_SIZEfor lengthIndex = 1, TOWER_SIZE dolocal spawnX = lengthIndex * CUBE_SIZEendendİç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 edilirfor 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 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 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 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ı