Debris
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
บริการ กำจัดเศษซาก ช่วยให้สามารถกำหนดการทำลายอย่างถาวรของวัตถุโดยไม่ยอมแพ้
ข้อดี
นอกจากการสร้างความสับสนเล็กน้อยแล้ววัตถุที่ไม่จำเป็นอีกต่อไปสามารถใช้หน่วยความจำของระบบและทําให้ประสบการณ์ทํางานช้าลงเมื่อเวลาผ่านไปด้วยเหตุผลนี้ จึงแนะนำเสมอให้โทร Instance:Destroy() บนวัตถุที่คุณไม่ต้องการอีกต่อไปในบางกรณี อาจมีวัตถุมีระยะเวลาการใช้งานที่เฉพาะเจาะจงก่อนที่จะสามารถทำลายได้
พิจารณากำผนังถูกทำลายเป็นอิฐแต่ละอันหากต้องการให้อิฐอยู่ได้ 3 วินาทีก่อนที่จะถูกทําลาย คุณสามารถใช้รหัสต่อไปนี้ได้:
task.wait(3)brick:Destroy()
อย่างไรก็ตามการรอคอยทำให้เธรดยอมแพ้ซึ่งอาจไม่พึงประสงค์เพื่อหลีกเลี่ยงการยอมแพ้ ฟังก์ชันการโทรกลับสามารถกำหนดเวลาให้ทำงานบนกระทู้ใหม่หลังจาก 3 วินาที:
task.delay(3, function()
brick:Destroy()
end)
หรือในบรรทัดเดียว:
task.delay(3, brick.Destroy, brick)
แม้ว่าสิ่งนี้จะหลีกเลี่ยงการยอมแพ้แล้ว แต่ก็มีข้อเสียในแง่ของความเป็นไปได้ที่การโทรกลับที่กำหนดไว้จะไม่เรียกใช้หากสคริปต์ถูกปิดหรือทำลายก่อนที่การโทรกลับจะเรียกใช้
นี่คือที่ Debris มีข้อได้เปรียบเฉพาะ เนื่องจากไม่สร้างกระทู้ปัจจุบันและทำงานนอกบริบทของสคริปต์ รับประกันว่าตัวอย่างจะถูกทำลายในที่สุดแม้ว่าสคริปต์จะถูกปิดหรือทำลายโค้ดต่อไปนี้จะไม่ให้ผลและรับประกันว่าตัวอย่างจะถูกทําลาย:
Debris:AddItem(brick, 3)
โปรดทราบว่า Debris มีขีดจํากัดสูงสุดที่บีบอัดไว้ล่วงหน้าสูงสุด 1,000 วัตถุดังนั้นหากเพิ่มไอเทมมากกว่า 1,000 รายการ ขยะที่เก่าแก่ที่สุดจะถูกทําลายทันทีเพื่อสร้างที่ว่างสําหรับขยะใหม่
ตัวอย่างโค้ด
Creates parts on a loop and parents them to the Workspace, then uses Debris.AddItem to clean them up.
local Debris = game:GetService("Debris")
local ball = Instance.new("Part")
ball.Anchored = false
ball.Shape = Enum.PartType.Ball
ball.TopSurface = Enum.SurfaceType.Smooth
ball.BottomSurface = Enum.SurfaceType.Smooth
ball.Size = Vector3.new(1, 1, 1)
local RNG = Random.new()
local MAX_VELOCITY = 10
while true do
local newBall = ball:Clone()
newBall.BrickColor = BrickColor.random()
newBall.CFrame = CFrame.new(0, 30, 0)
newBall.Velocity =
Vector3.new(RNG:NextNumber(-MAX_VELOCITY, MAX_VELOCITY), 0, RNG:NextNumber(-MAX_VELOCITY, MAX_VELOCITY))
newBall.Parent = game.Workspace
Debris:AddItem(newBall, 2)
task.wait(0.1)
end
สรุป
วิธีการ
กำหนดการ Instance สําหรับการทําลายภายในช่วงเวลาที่กําหนด
คุณสมบัติ
วิธีการ
AddItem
กำหนดการ Instance สําหรับการทําลายภายในช่วงเวลาที่กําหนดหลังจากที่อาร์กิวเมนต์ lifetime หมดอายุแล้ว วัตถุจะถูกทําลายในลักษณะเดียวกับ Instance:Destroy()โปรดทราบว่าอาร์กิวเมนต์ lifetime เป็นตัวเลือกและเริ่มต้นที่ 10 วินาที
โปรดทราบว่า Debris มีขีดจํากัดสูงสุดที่บีบอัดไว้ล่วงหน้าสูงสุด 1,000 วัตถุดังนั้นหากเพิ่มไอเทมมากกว่า 1,000 รายการ ขยะที่เก่าแก่ที่สุดจะถูกทําลายทันทีเพื่อสร้างที่ว่างสําหรับขยะใหม่ซึ่งหมายความว่าคุณควรปฏิบัติต่อพารามิเตอร์ lifetime ในฐานะชีวิตสูงสุด **** ไม่ใช่ชีวิตที่แน่นอน
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
Creates parts on a loop and parents them to the Workspace, then uses Debris.AddItem to clean them up.
local Debris = game:GetService("Debris")
local ball = Instance.new("Part")
ball.Anchored = false
ball.Shape = Enum.PartType.Ball
ball.TopSurface = Enum.SurfaceType.Smooth
ball.BottomSurface = Enum.SurfaceType.Smooth
ball.Size = Vector3.new(1, 1, 1)
local RNG = Random.new()
local MAX_VELOCITY = 10
while true do
local newBall = ball:Clone()
newBall.BrickColor = BrickColor.random()
newBall.CFrame = CFrame.new(0, 30, 0)
newBall.Velocity =
Vector3.new(RNG:NextNumber(-MAX_VELOCITY, MAX_VELOCITY), 0, RNG:NextNumber(-MAX_VELOCITY, MAX_VELOCITY))
newBall.Parent = game.Workspace
Debris:AddItem(newBall, 2)
task.wait(0.1)
end