Debris
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Il servizio Debris consente la programmazione della distruzione garantita di un oggetto senza rendere consegne.
Vantaggi
Oltre a creare un po 'disastro, gli oggetti che non sono più richiesti possono usare la memoria di sistema e causare un'esperienza a essere eseguita più lentamente nel tempo. Per questo motivo, è sempre consigliato chiamare Instance:Destroy() sui oggetti che non hai più bisogno. In alcuni casi, tuttavia, un oggetto può avere un periodo di utilità specifico prima di poter essere distrutto.
Considera che un muro venga distrutto in singoli mattoni. Se vuoi che un mattone rimanga per 3 secondi prima di essere distrutto, puoi utilizzare il seguente codice:
task.wait(3)brick:Destroy()
Tuttavia, l'attesa fa si che il thread produca il quale potrebbe essere non desiderato. Per evitare l'attesa, una funzione di callback può essere programmata per essere eseguita su un nuovo thread dopo 3 secondi:
task.delay(3, function()
brick:Destroy()
end)
O in una riga:
task.delay(3, brick.Destroy, brick)
Mentre questo ora evita di arrendere, ha un potenziale svantaggio nel fatto che il richiamato programmato non verrà mai eseguito se lo script è disabilitato o distrutto prima dell'esecuzione del richiamato.
Questo è dove Debris ha un vantaggio specifico, poiché non produce il thread attuale e viene eseguito al di fuori del contesto dello script, garantendo che l'istanza sia alla fine distrutta anche se lo script è disabilitato o distrutto. Il seguente codice non produce e garantisce che l'istanza sia distrutta:
Debris:AddItem(brick, 3)
Nota che Debris ha un massimo hardcoded di 1.000 oggetti, quindi se più di 1.000 oggetti vengono aggiunti, il più vecchio rifiuto verrà distrutto istantaneamente per fare spazio a nuovi debris.
Campioni di codice
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
Proprietà
Metodi
AddItem
Programma un Instance per la distruzione all'interno della vita specificata. Dopo che l'argomento lifetime è scaduto, l'oggetto viene distrutto allo stesso modo come Instance:Destroy() . Nota che l'argomento 2> Lifetime2> è opzionale e predefinito a 10 secondi.
Nota che Debris ha un massimo hardcoded di 1.000 oggetti, quindi se più di 1.000 oggetti vengono aggiunti, il più vecchio rifiuto verrà distrutto istantaneamente per fare spazio a nuovi debris. Ciò significa che dovresti trattare il lifetime parametro come un massimoLifetime , non un tempo di vita esatto.
Parametri
Restituzioni
Campioni di codice
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