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 Debris umożliwia zaplanowanie gwarantowanej zniszczenia obiektu bez zachowania.
Zalety
Oprócz tworzenia trochę bałaganu, obiekty, które nie są już wymagane, mogą używać pamięci systemu i powodować, że doświadczenie będzie działać powoli w ciągu czasu. Z tego powodu zawsze należy wezwywać Instance:Destroy() na obiektach, które nie są już wymagane. W niektórych przypadkach jednak obiekt może mieć określny okres użyteczności
Rozważ, że ściana jest rozdzielana na pojedyncze klocki. Jeśli chcesz, aby klocki trzymały się przez 3 sekundy, zanim zostaną usunięte, możesz użyć następującego kodu:
task.wait(3)brick:Destroy()
Jednak czekanie powoduje, że wątek zwraca, co może niechciano. Aby uniknąć czekania, można zaplanować funkcję zwrotu na nowym wątku po 3 sekundach:
task.delay(3, function()
brick:Destroy()
end)
Albo w jednej linii:
task.delay(3, brick.Destroy, brick)
Podczas gdy to teraz unika, to ma potencjalny wadliwy efekt, że zaplanowany zwrotny call nie zostanie nigdy wykonany, jeśli skrypt zostanie wyłączony lub zniszczony przed wykonaniem zwrotnego call.
To jest miejsce, w którym Debris ma specjalne przewagę, ponieważ nie wygeneruje obecnego wątku i będzie działać poza kontekstem skryptu, gwarantując, że instancja zostanie w końcu usunięta, nawet jeśli skrypt zostanie wyłączony lub usunięty. Poniższy kod nie wygeneruje i nie zagwarantuje, że instancja zostanie usunięta:
Debris:AddItem(brick, 3)
Uwaga, że Debris ma maksymalnie 1000 obiektów, więc jeśli więcej niż 1000 przedmiotów zostanie dodanych, najstarsze przedmioty zostaną natychmiastowo usunięte, aby stworzyć miejsce na nowe przedmioty.
Przykłady kodu
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 Instance dla zniszczenia w określonym czasie życia.
Właściwości
Metody
AddItem
Planuje Instance dla zniszczenia w określonym czasie życia. Po upływie argumentu lifetime obiekt jest niszczony w ten sam sposób jak Instance:Destroy(). Uwaga, że argument 1> Lifetime1> jest opcjonalny i domyślnie wynosi 10 sekund.
Uwaga, że Debris ma maksymalnie 1000 obiektów, więc jeśli więcej niż 1000 przedmiotów zostanie dodanych, najstarszych przedmiotów zostanie natychmiastowo usuniętych, aby stworzyć miejsce na nowe przedmioty. Oznacza to, że powinieneś traktować parametr lifetime jako maksymalnego życia
Parametry
Zwroty
Przykłady kodu
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