清障 服务可以保证在不放弃的情况下对对象进行保证摧毁。
优势
除了创造一点混乱外,不再需要的对象可以使用系统内存并导致经验在一段时间内运行速度降低。因此,建议永远不要调用 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
为指定的 Instance 安排在指定时间内进行摧毁。在 lifetime 参数过期后,对象以相同的方式被摧毁,即 Instance:Destroy() 。请注意,lifetime 参数是可选的,默认值为 10 秒。
请注意,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