Debris
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Usługa Usuwania odpadów pozwala na planowanie gwarantowanej zniszczenia obiektu bez poddawania się.
Zalety
Oprócz stworzenia trochę bałaganu obiekty, które nie są już wymagane, mogą wykorzystywać pamięć systemową i spowalniać doświadczenie z czasem.Z tego powodu zawsze należy wezwać Instance:Destroy() na obiekty, których już nie potrzebujesz.W niektórych przypadkach jednak obiekt może mieć określony okres użytkowania, zanim może zostać zniszczony.
Rozważmy ścianę rozbijaną na poszczególne cegły.Jeśli chcesz, aby cegła utrzymywała się przez 3 sekundy przed zniszczeniem, możesz użyć następującego kodu:
task.wait(3)brick:Destroy()
Jednak oczekiwanie powoduje, że wątek się zatrzymuje, co może być niepożądane.Aby uniknąć poddawania się, funkcja powrotna może być zaplanowana do uruchomienia na nowej wątku po 3 sekundach:
task.delay(3, function()
brick:Destroy()
end)
Lub w jednej linii:
task.delay(3, brick.Destroy, brick)
Choć to teraz unika ustępowania, ma potencjalną wadę w tym, że zaplanowany powrót nigdy nie zostanie uruchomiony, jeśli skrypt zostanie wyłączony lub zniszczony przed uruchomieniem powrotu.
To jest miejsce, gdzie Debris ma szczególną przewagę, ponieważ nie zapewnia obecnego wątku i działa poza kontekstem skryptu, gwarantując, że instancja zostanie ostatecznie usunięta, nawet jeśli skrypt jest wyłączony lub zniszczony.Poniższy kod nie zwraca i gwarantuje, że instancja zostanie unicestwiona:
Debris:AddItem(brick, 3)
Zauważ, że Debris ma stałą maksymalną liczbę 1,000 obiektów, więc jeśli zostaną dodane więcej niż 1,000 przedmiotów, najstarsze odpady zostaną natychmiast zniszczone, aby zrobić miejsce na nowe odpady.
Przykłady kodu
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
Podsumowanie
Metody
Planuje dane Instance
Właściwości
Metody
AddItem
Planuje dane InstancePo upływie argumentu lifetime zostaje on zniszczony w taki sam sposób, jak Instance:Destroy() .Zauważ, że argument lifetime jest opcjonalny i domyślnie wynosi 10 sekund.
Zauważ, że Debris ma stałą maksymalną liczbę 1,000 obiektów, więc jeśli zostaną dodane więcej niż 1,000 przedmiotów, najstarsze odpady zostaną natychmiast zniszczone, aby zrobić miejsce na nowe odpady.Oznacza to, że powinieneś traktować parametr lifetime jako życie maksymalne a nie dokładne życie.
Parametry
Zwroty
Przykłady kodu
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