ห่วงโซ่ช่วยให้คุณทำซ้ำงานในชุด เช่น การอบสามชุดของหกคัพเค้กหรือการเรียกร้องอาวุธให้กับผู้เล่นในสองทีม
วิธีการทำงานของล็อปที่เหมาะ
เมื่อมีคําว่าซึ่งกันและกันเมื่อเรียงต่อกันจนกว่าจะถึงคําสั่งต่อไป คําสั่งภายในจะดําเนินการจนกว่าจะตรงตามเงื่อนไขก่อนที่จะกลับไปที่คําสั่งภายนอก
การจัดการของเวลาที่เกี่ยวข้อง
ตัวอักษรต่อไปแสดงขั้นตอนที่วงแหวนใช้
วงจรภายนอก: รหัสวิ่งตามสายจนกว่าจะถึงวงจรภายใน วงจรภายนอก: รหัสวิ่งตามสายจนกว่าจะถึงวงจรภายใน วงจรภายนอก: รหัสวิ่งตามสายจนกว่ |
ตัวอย่างวงจรที่เหมาะสม
ลำดับขั้นสามารถดูเหมือนค่อนข้างลึกลับดังนั้นตัวอย่างของสคริปตัวอย่างจึงเป็นประโยชน์ สำหรับการฝึกซ้อมนี้ให้คัดลอกและวางสคริปตัวอย่างและดำเนินการใน Studio ตัวอย่างนี้จะสร้างหอคอ
สร้างสคริปต์ใหม่ใน ServerScriptService ที่มีชื่อว่า PartMaker คัดลอกโค้ดด้านล่าง
local numberOfBatches = 7local partsPerBatch = 5local partsMade = 0-- สร้างลูกบาศก์เดียวlocal 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-- ห่วงด้านนอก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))-- ห่วงโซ่ภายใน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)endดูสคริปต์เริ่มต้นชุดอื่น ๆ ของชิ้นส่วนสี หลังจากผ่านแต่ละชุด มันจะหยุดเป็นเวลา 2 วินาที ประกาศพิมพ์ในห่วงภายนอกจะดำเนินการเฉพาะครั้งเดียวต่อการเสร็จสิ้นแต่ละห่วง
ติดตั้งสำหรับหอคอยเหล่า
รหัสหนึ่งสิ่งที่เรียงลำดับของห่วงสามารถทำได้คือเปลี่ยนตำแหน่งที่วัตถุปรากฏขึ้นเพื่อสร้างหอค
การเขียนสคริปต์ Cube Maker
เพื่อซ้อมซากของหลายชั้น คุณจะสร้างสคริปที่สร้างหอคอยของลูกบาศก์ สำหรับสคริปที่เป็นลูกบาศก์ ให้เรียกฟังก์ชันเริ่มต้นที่สร้างลูกบาศก์เดียว หอคอยจะถูกสร้างโดยการเรียกฟังก์ชันนี้ซ้ำแล้ว
การติดตั้งสคริปต์
สำหรับสคริปต์ของหอคอยลูกบาศก์, ให้รหัสสัญลักษณ์เดียวที่สร้างลูกบาศก์เดียว หอคอยจะถูกสร้างโดยการเรียกใช้รหัสนี้ซ้ำแล้วซ้ำ
ลบ สคริปต์ PartMaker หรือปิดมัน (ในโปรไฟล์สคริปต์ตรวจสอบว่า ปิด) หากคุณไม่ได้ลบสคริปต์อื่น ๆ จะมีสคริปต์ที่ทำงานอยู่สองสคริปต์ในเวลาเดียวกันในสถานที่เดียวกัน
สร้างสคริปต์ใหม่ที่มีชื่อว่า TowerBuilder เพิ่มตัวแปรสำหรับขนาดของหอคอยและขนาดของลูกบาศก์ในด้านบน
local TOWER_SIZE = 4local CUBE_SIZE = 2เพิ่มฟังก์ชันในพื้นที่ชื่อว่า makeCube() ที่สร้างลูกบาศก์สี่เหลี่ยมผืนเดียวโดยใช้ CUBE_SIZE
local TOWER_SIZE = 4local CUBE_SIZE = 2-- สร้างลูกบาศก์แต่ละlocal function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)endตั้งสีของลูกบาศก์เป็นสีที่ปรับแก้ได้ซึ่งจะปรับแก้ได้ในลำดับที่เรียงซ้อน
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorendสุดท้าย, พ่อ ลูกชายใหม่ในพื้นที่ทำงานเพื่อให้มันดู
local function makeCube()local cube = Instance.new("Part")cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)cube.Color = currentColorcube.Parent = workspaceend
เกิดขึ้นในทิศทางที่แตกต่างกัน
เพื่อสร้างหอคอยให้เรียกลูกบาศก์ที่จุดต่างๆ โดยการตั้งค่า X, Y, Z ของแต่ละลูกบาศก์ใหม่ X และ Z อยู่ด้านข้าง
ใน makeCube() เพิ่มตัวอักษรสำหรับ spawnX``spawnY และ 1> spawnZ1> ตัวเลขเหล่านี้จะตั้งตำแหน่งการเรียกแต่ละลูกบาศก์ใหม่
-- สร้างลูกบาศก์แต่ละlocal 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ภายในฟังก์ชันตั้งค่าค่าโครงสร้าง CFrame ของ Cube ให้เป็น CFrame ใหม่โดยใช้ spawnX , spawnY , spawnZ พารามิเตอร์
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
การเรียกใช้ด้วยค่าเริ่มต้น
สคริปต์จะมีสามขั้นตอนทั้งหมด หนึ่งสำหรับความยาว ความกว้าง และความสูงของหอคอย เพื่อเสร็จสิ้นชั้นของตัวอาคารก่อนเคลื่อนตัวขึ้นไป เริ่มต้นด้วยการตั้ง Y คอร์ดิเนตในหน้าแรก และเป็นขั้นตอนสุด
ภายใต้การใช้งาน makeCube() ฟังก์ชัน สร้าง for ของลูปเพื่อตั้งค่าว่า สูง แต่ละจุดเกิดของลูกบาศก์
- ควบคุมแปรผัน : heightIndex = 1
- จุดสิ้นสุด : TOWER_SIZE
- ในล็อป, เพิ่ม: local spawnY = ( heightIndex - 1) * CUBE_SIZE
-- สร้างหอคอยfor heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEendเมื่อเสร็จสิ้นกับวงจรแรกสำหรับความสูงเริ่มต้นในวงจรที่สอง ภายในวงจรแรกเพิ่มวงจรใหม่สำหรับสถานที่ที่จะวางลูกบาศก์ในความยาวของหอคอย
- ควบคุมตัวแปร : lengthIndex = 1
- จุดสิ้นสุด : TOWER_SIZE
- ในล็อปนั้นเพิ่ม: local spawnX = lengthIndex * CUBE_SIZE
for heightIndex = 1, TOWER_SIZE dolocal spawnY = (heightIndex - 1) * CUBE_SIZEfor lengthIndex = 1, TOWER_SIZE dolocal spawnX = lengthIndex * CUBE_SIZEendendใน วงแหวนที่สอง เพิ่ม สาม สำหรับวงแหวนสำหรับ ความกว้าง ของหอคอย ในวงแหวนนี้สุดท้าย โทร 1> makeCube()1> และผ่านตัวแปร X, Y, Z
- ควบคุมแปรผัน : widthIndex = 1
- จุดสิ้นสุด : TOWER_SIZE
- เพิ่ม:
- local spawnZ = widthIndex * CUBE_SIZE
- makeCube(spawnX, spawnY, spawnZ)
- เวลารอ 0.25 วินาทีเพื่อให้คุณสามารถดูหอคอยได้
-- สร้างหอคอยfor 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)endendendเพื่อให้แต่ละชั้นเป็นสีสันแบบสุ่ม เปลี่ยน currentColor เป็นตัวเลขสุ่ม RGB ในสายเครื่องมือในเวลาเดียวกันที่คุณสร้างชั้นใหม่
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)endendendดำเนินโครงการและรอให้เห็นว่ามีการสร้างหอคอยเต็มแล้วโดยไม่มีข้อผิดพลาดใด ๆ ในหน้าต่างการออก
ความท้าทายที่อาจเกิดขึ้น
ด้านล่างนี้เป็นความท้าทายที่นำทางตัวเองที่ใช้วงจรที่เรียงซ้อนกันอย่างแตกต่างกัน ลองให้โค้ดด้วยตัวคุณเองก่อนที่จะดูที่แกนหลัก
ออกอาจออก
เมื่อสร้างหอคอยแล้ว ให้ชิ้นส่วนมีความโปร่งใสออกไปจากด้านซ้ายไปขวา
โซลูชันรหัสอยู่ด้านล่าง
local TOWER_SIZE = 6
local CUBE_SIZE = 2
-- สร้างลูกบาศก์แต่ละ
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 -- ตั้งค่าความโปร่งใส
cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
cube.Parent = workspace
end
-- สร้างหอคอย
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 --อัปเดตทุกๆ ห่วงโซ่ที่เริ่มต้นที่ 0
for widthIndex = 1, TOWER_SIZE do
local spawnZ = widthIndex * CUBE_SIZE
makeCube(spawnX, spawnY, spawnZ)
task.wait(0.05)
end
end
end
วัตถุที่ตก
แทนที่จะเป็นชิ้นส่วน ลองสร้างวัตถุจริงดู ตัวอย่างที่นี่ใช้คัพเค้ก
ด้วยตัวคุณเองว่าคุณสามารถ:
- สร้างวัตถุจากชิ้นส่วนพื้นฐาน ตรวจสอบให้แน่ใจว่าคุณต้องเชื่อมต่อทุกชิ้นส่วนเพื่อให้วัตถุไม่ล่มสลาย
- วางวัตถุใน ServerStorage
- แก้ไข PartMaker ที่พบใน ตัวอย่าง Nested Loop เพื่อใช้วัตถุของคุณแทนที่จะเป็นชิ้นส่วน
ตัวอย่างจะปรากฏที่นี่
มีการแก้ปัญหาด้วยคัพเค้ก
local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
--ทำคัพเค้กเดี่ยว
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
-- ห่วงด้านนอก
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))
-- ห่วงโซ่ภายใน
for cupcakeNumber = 1, cupcakesPerBatch do
makeCupcake()
print("Inner loop: cupcake " .. cupcakeNumber)
-- แทร็ก muffins อบ
cupcakesBaked += 1
task.wait(0.5)
end
print("Bottom outer loop: " .. cupcakesBaked .. " cupcakes baked so far.")
end
สรุป
เพื่อประสานงานภารกิจที่ซับซ้อนมากขึ้น นักเขียนจะพบว่ามันเป็นประโยชน์ในการผสานหลายห่วงโซ่ และแม้ประเภทของห่วงโซ่ที่แตกต่างกัน ห่วงโซ่ทั้งหมดสามารถถูกนำมาใช