Debris
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Il servizio Debris consente di programmare la distruzione garantita di un oggetto senza arrendersi.
Vantaggi
Oltre a creare un po' di disordine, gli oggetti che non sono più necessari possono utilizzare la memoria del sistema e causare un'esperienza che rallenta nel tempo.Per questo motivo, è sempre consigliato chiamare Instance:Destroy() sugli oggetti di cui non hai più bisogno.In alcuni casi, però, un oggetto può avere un periodo di utilità specifico prima che possa essere distrutto.
Considera un muro distrutto in singoli mattoni.Se vuoi che un mattone rimanga per 3 secondi prima di essere distrutto, puoi usare il seguente codice:
task.wait(3)brick:Destroy()
Tuttavia, l'attesa causa il thread a cedere il quale potrebbe essere non desiderato.Per evitare di arrendersi, una funzione di richiamo può essere programmata per essere eseguita su un nuovo thread dopo 3 secondi:
task.delay(3, function()
brick:Destroy()
end)
O in una sola linea:
task.delay(3, brick.Destroy, brick)
Mentre questo ora evita il cedimento, ha un potenziale svantaggio nel fatto che il richiamo programmato non verrà mai eseguito se lo script viene disabilitato o distrutto prima che il richiamo venga eseguito.
Questo è dove Debris ha un vantaggio specifico, poiché non fornisce il thread attuale e viene eseguito al di fuori del contesto dello script, garantendo che l'istanza venga eventualmente distrutta anche se lo script è disabilitato o distrutto.Il seguente codice non produce e garantisce che l'istanza verrà distrutta:
Debris:AddItem(brick, 3)
Nota che Debris ha un limite massimo hardcoded di 1,000 oggetti, quindi se vengono aggiunti più di 1,000 oggetti, i detriti più vecchi verranno distrutti all'istante per fare spazio per i nuovi debris.
Campioni di codice
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
Sommario
Proprietà
Metodi
Programma un dato Instance per la distruzione all'interno della vita specificata.
Proprietà
Metodi
AddItem
Programma un dato Instance per la distruzione all'interno della vita specificata.Dopo che l'argomento lifetime è scaduto, l'oggetto viene distrutto nello stesso modo di Instance:Destroy() .Nota che l'argomento lifetime è opzionale e predefinito su 10 secondi.
Nota che Debris ha un limite massimo hardcoded di 1,000 oggetti, quindi se vengono aggiunti più di 1,000 oggetti, i detriti più vecchi verranno distrutti all'istante per fare spazio per i nuovi debris.Questo significa che dovresti trattare il parametro lifetime come una vita massima e non una vita esatta.
Parametri
Restituzioni
Campioni di codice
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