Debris
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Layanan Debris memungkinkan menjadwalkan penghancuran objek yang dijamin tanpa menyerah.
Manfaat
Selain membuat sedikit kekacauan, objek yang tidak lagi diperlukan dapat menggunakan memori sistem dan menyebabkan pengalaman berjalan lebih lambat seiring waktu.Untuk alasan ini, selalu disarankan untuk memanggil Instance:Destroy() pada objek yang tidak lagi Anda butuhkan.Namun, dalam beberapa kasus, objek mungkin memiliki periode kegunaan tertentu sebelum dapat dihancurkan.
Pertimbangkan dinding dihancurkan menjadi bata individu.Jika Anda ingin batu bata tetap selama 3 detik sebelum hancur, Anda dapat menggunakan kode berikut:
task.wait(3)brick:Destroy()
Namun, menunggu menyebabkan thread menghasilkan yang mungkin tidak diinginkan.Untuk menghindari menyerah, fungsi panggil balasan dapat dijadwalkan untuk dijalankan pada thread baru setelah 3 detik:
task.delay(3, function()
brick:Destroy()
end)
Atau dalam satu baris:
task.delay(3, brick.Destroy, brick)
Meskipun ini sekarang menghindari menyerah, ia memiliki kekurangan potensial dalam kenyataan bahwa panggilan balasan yang dijadwalkan tidak akan pernah dijalankan jika skrip dinonaktifkan atau dihancurkan sebelum panggilan balasan dijalankan.
Di sinilah Debris memiliki keuntungan khusus, karena tidak menghasilkan thread saat ini dan dijalankan di luar konteks skrip, menjamin instansi akhirnya hancur bahkan jika skrip dinonaktifkan atau dihancurkan.Kode berikut tidak menghasilkan dan menjamin instansi akan hancur:
Debris:AddItem(brick, 3)
Perhatikan bahwa Debris memiliki batas maksimum yang diperhitungkan 1,000 objek, jadi jika lebih dari 1,000 item ditambahkan, sampah tertua akan hancur seketika untuk membuat ruang untuk sampah baru.
Contoh Kode
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
Rangkuman
Metode
Jadwalkan Instance tertentu untuk penghancuran dalam masa hidup yang ditentukan.
Properti
Metode
AddItem
Jadwalkan Instance tertentu untuk penghancuran dalam masa hidup yang ditentukan.Setelah argumen lifetime berlalu, objek dihancurkan dengan cara yang sama dengan Instance:Destroy() .Perhatikan bahwa argumen lifetime opsional dan default ke 10 detik.
Perhatikan bahwa Debris memiliki batas maksimum yang diperhitungkan 1,000 objek, jadi jika lebih dari 1,000 item ditambahkan, sampah tertua akan hancur seketika untuk membuat ruang untuk sampah baru.Ini berarti Anda harus memperlakukan parameter sebagai masa hidup maksimum, bukan masa hidup yang tepat.
Parameter
Memberikan nilai
Contoh Kode
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