Debris
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
El servicio de escombros permite programar la destrucción garantizada de un objeto sin rendirse.
Beneficios
Además de crear un poco de desorden, los objetos que ya no son necesarios pueden agotar la memoria del sistema y causar que una experiencia se ejecute más lentamente con el tiempo.Por esta razón, siempre se recomienda llamar Instance:Destroy() a objetos que ya no necesitas.Sin embargo, en algunos casos, un objeto puede tener un período de utilidad específico antes de que pueda ser destruido.
Considera una pared que se rompe en ladrillos individuales.Si quieres que un bloque persista durante 3 segundos antes de ser destruido, puedes usar el siguiente código:
task.wait(3)brick:Destroy()
Sin embargo, esperar hace que el hilo se rinda, lo que puede ser no deseado.Para evitar rendirse, una función de devolución de llamada se puede programar para ejecutarse en un nuevo hilo después de 3 segundos:
task.delay(3, function()
brick:Destroy()
end)
O en una línea:
task.delay(3, brick.Destroy, brick)
Aunque esto ahora evita rendirse, tiene una desventaja potencial en que la llamada de devolución programada nunca se ejecutará si el script se desactiva o se destruye antes de que se ejecute la llamada de devolución.
Aquí es donde Debris tiene una ventaja específica, ya que no produce el hilo actual y se ejecuta fuera del contexto del script, garantizando que la instancia se destruirá eventualmente incluso si el script está desactivado o destruido.El siguiente código no produce y garantiza que la instancia se destruirá:
Debris:AddItem(brick, 3)
Tenga en cuenta que Debris tiene un máximo codificado de 1,000 objetos, por lo que si se agrega más de 1,000 artículos, los residuos más antiguos se destruirán instantáneamente para hacer espacio para nuevos debris.
Muestras de código
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
Resumen
Métodos
Programa un dado Instance.
Propiedades
Métodos
AddItem
Programa un dado Instance.Después de que el argumento lifetime haya expirado, el objeto se destruye de la misma manera que Instance:Destroy() .Tenga en cuenta que el argumento lifetime es opcional y se predetermina a 10 segundos.
Tenga en cuenta que Debris tiene un máximo codificado de 1,000 objetos, por lo que si se agrega más de 1,000 artículos, los residuos más antiguos se destruirán instantáneamente para hacer espacio para nuevos debris.Esto significa que deberías tratar el parámetro lifetime como una vida máxima de **** , no una vida exacta.
Parámetros
Devuelve
Muestras de código
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