Debris
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Le service débris permet de programmer la destruction garantie d'un objet sans céder.
Avantages
En plus de créer un peu de désordre, les objets qui ne sont plus requis peuvent utiliser la mémoire du système et provoquer une expérience à ralentir au fil du temps.Pour cette raison, il est toujours conseillé d'appeler Instance:Destroy() sur les objets dont vous n'avez plus besoin.Cependant, dans certains cas, un objet peut avoir une période d'utilité spécifique avant qu'il ne puisse être détruit.
Considérez un mur qui se brise en des briques individuelles.Si vous voulez qu'une brique persiste pendant 3 secondes avant d'être détruite, vous pouvez utiliser le code suivant :
task.wait(3)brick:Destroy()
Cependant, l'attente provoque la libération du thread ce qui peut être indésirable.Pour éviter de céder, une fonction de rappel peut être programmée pour s'exécuter sur un nouveau thread après 3 secondes :
task.delay(3, function()
brick:Destroy()
end)
Ou en une ligne :
task.delay(3, brick.Destroy, brick)
Bien que cela évite maintenant de céder, il a un inconvénient potentiel dans le fait que le rappel prévu ne sera jamais exécuté si le script est désactivé ou détruit avant l'exécution du rappel.
C'est là que Debris a un avantage spécifique, car il ne produit pas le thread actuel et s'exécute en dehors du contexte du script, ce qui garantit que l'instance est finalement détruite même si le script est désactivé ou détruit.Le code suivant ne produit pas et garantit que l'instance sera détruite :
Debris:AddItem(brick, 3)
Notez que Debris a un maximum codé en dur de 1 000 objets, donc si plus de 1 000 articles sont ajoutés, les débris les plus anciens seront détruits instantanément pour faire de la place pour de nouveaux débris (service).
Échantillons de code
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
Résumé
Méthodes
Programme un donné Instance pour destruction dans la durée de vie spécifiée.
Propriétés
Méthodes
AddItem
Programme un donné Instance pour destruction dans la durée de vie spécifiée.Après que l'argument lifetime ait expiré, l'objet est détruit de la même manière que Instance:Destroy() .Notez que l'argument lifetime est facultatif et se définit par défaut sur 10 secondes.
Notez que Debris a un maximum codé en dur de 1 000 objets, donc si plus de 1 000 articles sont ajoutés, les débris les plus anciens seront détruits instantanément pour faire de la place pour de nouveaux débris (service).Cela signifie que vous devez traiter le paramètre lifetime comme une durée de vie maximale , et non pas une durée exacte.
Paramètres
Retours
Échantillons de code
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