Debris
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Dịch vụ Debris cho phép lịch trình để đảm bảo sự hủy diệt của một đối tượng mà không bị tác động.
Những lợi thế
Ngoài việc tạo ra một chút rắc rối, các đối tượng không còn cần thiết có thể sử dụng bộ nhớ hệ thống và gây ra một trải nghiệm chạy chậm hơn theo thời gian. Vì lý do này, luôn luôn được khuyến nghị gọi Instance:Destroy()
Hãy xem xét một bức tường được phá vỡ thành các khối nhỏ. Nếu bạn muốn một khối gạch để linger trong 3 giây trước khi bị xóa sổ, bạn có thể sử dụng mã sau đây:
task.wait(3)brick:Destroy()
Tuy nhiên, đợi dẫn đến việc gọi xe hoặc khiến nó không mong muốn. Để tránh gọi xe, một hàm call có thể được lịch trình để chạy trên một người mới mở sau 3 giây:
task.delay(3, function()
brick:Destroy()
end)
Hoặc trong một dòng:
task.delay(3, brick.Destroy, brick)
Trong khi điều này giờ đã tránh được thời gian trễ, nó có một nhược điểm tiềm năng là lịch trình gọi điều đó sẽ không bao giờ chạy nếu script đã bị tắt hoặc phá hủy trước khi gọi điều đó.
Đây là nơi Debris có một lợi thế cụ thể, vì nó không tạo ra thread hiện tại và chạy ngoài context của script, đảm bảo rằng instace cuối cùng được phá hủy ngay cả khi script bị tắt hoặc bị phá hủy. Mã sau đây không tạo ra và đảm bảo instace sẽ được phá hủy:
Debris:AddItem(brick, 3)
Lưu ý rằng Debris có một tối đa 1.000 đối tượng đã mã hóa, vì vậy nếu có hơn 1.000 đối tượng được thêm vào, đối tượng cũ sẽ bị phá hủy ngay để tạo room cho đối tượng mới.
Mẫu mã
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
Tóm Tắt
Phương Pháp
Lịch một Instance cho sự hủy diệt trong thời gian thích hợp.
Thuộc Tính
Phương Pháp
AddItem
Lịch một Instance cho sự hủy diệt trong thời gian thích hợp. Sau khi lifetime argument đã hết hạn, đối tượng được tiêu diệt theo cùng một cách như Instance:Destroy() . Ghi chú rằng 1> Lifetime1> argument là tùy ch
Lưu ý rằng Debris có một mức tối đa cứng độ 1.000 đối tượng, vì vậy nếu thêm hơn 1.000 đối tượng, đối tượng cũ sẽ bị phá hủy ngay lập tức để tạo ra không gian mới cho đố
Tham Số
Lợi Nhuận
Mẫu mã
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