Debris

Pokaż przestarzałe

*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.

Brak możliwości tworzenia
Usługa

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.

Debris AddItem

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

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

item: Instance

The Instance do dodania do Debris.

Wartość domyślna: ""
lifetime: number

Liczba sekund przed tym, jak Instance powinny zostać zniszczone.

Wartość domyślna: 10

Zwroty

()

Przykłady kodu

Creates parts on a loop and parents them to the Workspace, then uses Debris.AddItem to clean them up.

Debris AddItem

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

Zdarzenia