Dọn dẹp
Bài học 7 trên 25 trong khóa học Trò chơi Roblox: thoát khỏi bóng tối của Coddy.
Mỗi cánh cửa tạo thêm một căn phòng, và không căn phòng nào biến mất: chạy lâu sẽ khiến trò chơi có đầy những căn phòng mà người chơi sẽ không bao giờ thấy lại. Giữ căn phòng mới nhất cùng với Settings.KeepRooms căn phòng phía sau nó, rồi hủy phần còn lại:
for _, old in rooms:GetChildren() do
local number = old:GetAttribute("Number")
if number < count - Settings.KeepRooms then
old:Destroy()
end
endSảnh là phòng 0, nên sảnh cũng sẽ biến mất khi người chơi đi đủ xa, vượt qua màn sương. Một dòng in ra trong Output hiển thị từng căn phòng khi nó xuất hiện.
Thử thách
Trung bìnhXóa những căn phòng mà sẽ không ai nhìn thấy nữa.
- Ở cuối
addRoom, trước khi hàm trả về, hãy lặp quarooms:GetChildren(). - Với mỗi căn phòng có
Numbernhỏ hơncount - Settings.KeepRooms: in ra"Room " .. number .. " is gone", rồi hủy căn phòng đó.
Nhấn Chơi và mở bốn cánh cửa: Output hiển thị Room 0 is gone. Sau đó nhấn Kiểm tra.
Tự làm thử
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Lighting = game:GetService("Lighting")
local TweenService = game:GetService("TweenService")
local Settings = require(game.ReplicatedStorage.Settings)
local rooms = workspace.Rooms
local lastRoom = rooms.Lobby -- phòng mới nhất
local count = 0 -- số phòng đã tạo đến lúc này
-- Đêm xuống: không có ánh mặt trời, ánh sáng mờ khắp nơi và sương mù
Lighting.ClockTime = Settings.ClockTime
Lighting.Ambient = Settings.Ambient
Lighting.OutdoorAmbient = Settings.Ambient
Lighting.FogColor = Color3.new(0, 0, 0)
Lighting.FogEnd = Settings.FogEnd
print("Lights out")
-- Mở cửa bằng cách xoay quanh bản lề
local function openDoor(door)
door:SetAttribute("Open", true)
door.Panel.Prompt.Enabled = false
local hinge, panel = door.Hinge, door.Panel
local goal = hinge.CFrame * CFrame.Angles(0, math.rad(90), 0) * hinge.CFrame:ToObjectSpace(panel.CFrame)
TweenService:Create(panel, TweenInfo.new(0.6), { CFrame = goal }):Play()
end
local addRoom -- viết ở bên dưới: một cánh cửa thêm một phòng, và mỗi phòng có một cánh cửa
-- Điều xảy ra khi người chơi mở cửa
local function setupDoor(door)
door.Panel.Prompt.Triggered:Connect(function(player)
if door:GetAttribute("Open") then
return
end
if door.Parent == lastRoom then
addRoom()
end
openDoor(door)
end)
end
setupDoor(workspace.Rooms.Lobby.Door)
-- Khi người chơi bước vào phòng: phòng đó trở thành Room và điểm hồi sinh của họ
local function setupEntry(room)
room.Entry.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player then
local number = room:GetAttribute("Number")
player.leaderstats.Room.Value = number
player.RespawnLocation = room.Checkpoint
end
end)
end
setupEntry(workspace.Rooms.Lobby)
-- Phòng mới nằm ở lối ra của phòng mới nhất
function addRoom()
count += 1
local name = Settings.Order[(count - 1) % #Settings.Order + 1]
if count >= Settings.RoomsToEscape then
name = "Exit"
end
local room = ServerStorage.Rooms[name]:Clone()
room:PivotTo(lastRoom.Exit.CFrame)
room:SetAttribute("Number", count)
room.Sign.SurfaceGui.Number.Text = "Room " .. count
room.Parent = rooms
lastRoom = room
setupDoor(room.Door)
setupEntry(room)
-- Bài học 7: thêm phần dọn dẹp vào đây
return room
end
-- Mỗi người chơi: Room trên bảng xếp hạng và một chiếc đèn pin mỗi lần hồi sinh
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local room = Instance.new("IntValue")
room.Name = "Room"
room.Parent = leaderstats
player.CharacterAdded:Connect(function()
local flashlight = ServerStorage.Flashlight:Clone()
flashlight.Parent = player.Backpack
local beam = flashlight.Handle.Beam
flashlight.Activated:Connect(function()
beam.Enabled = not beam.Enabled
end)
end)
end)
Tất cả bài học trong Trò chơi Roblox: thoát khỏi bóng tối
Tự luyện tập: Playground Roblox