Debris 服务允许您安排一个对象的保证摧毁,而不会提供。
优势
除了创建一些混乱之外,不再需要的对象可以使用系统内存并导致体验在过时运行更慢。为此,总是建议在不再需要的对象上调用 Instance:Destroy() 。在某些情况下,但对象可能有特定期间的使用期限,在它被销毁之前。
考虑墙被打成个人的砖块。如果您想要一个砖块在被摧毁之前保持存在3秒,您可以使用以下验证码:
task.wait(3)brick:Destroy()
然而,请稍候,这可能会导致线程产生,这可能是不想要的。要避免产生,请在 3 秒后安排一个回调函数在新线程上运行:
task.delay(3, function()
brick:Destroy()
end)
或者在一个行中:
task.delay(3, brick.Destroy, brick)
虽然这现在避免了提交,但它有一个潜在的弊端,即在调用之前,脚本将永远不能运行。
这是 Debris 的特定优势,因为它不会生成当前线程,并且在脚本的上下文之外运行,确保实例最终会被销毁,即使脚本被禁用或销毁。以下代码不会生成并保证实例会被销毁:
Debris:AddItem(brick, 3)
注意,Debris 有一个硬码最大值 1,000 个对象,如果添加超过 1,000 个项目,最旧的废料将被立即销毁,以腾出新的碎片。
代码示例
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
概要
方法
为指定的 Instance 安排一个计时结束。
属性
方法
AddItem
void
为指定的 Instance 安排一个特定的lifetime 以在指定的生命时间内进行摧毁。在 Instance:Destroy() 参数过期后,对象会像 2>Class.Instance:Destroy2> 进行摧毁。注意, 5>Class.Instance:Destroy5> 参数是可选的,默认为 10 秒。
注意,Debris 有一个硬码的最大值为 1,000 个对象,如果超过 1,000 个项目,最旧的废料将被立即销毁,以腾出新的碎片。这意味着您应该将lifetime 参数视为 最大 的生命时间,而不是一个准确的生命时间。
参数
返回
void
代码示例
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