Số phòng
Bài học 6 trên 25 trong khóa học Trò chơi Roblox: thoát khỏi bóng tối của Coddy.
Người chơi cần biết mình đang ở sâu đến đâu. Mỗi phòng có số riêng: dưới dạng thuộc tính, Number, và trên biển báo phía trên cửa phòng (Sign.SurfaceGui.Number).
Mỗi phòng có một phần Entry vô hình nằm cách lối vào một bước chân. Khi cơ thể người chơi chạm vào phần này, phòng đó trở thành Room của họ trên bảng xếp hạng và là điểm lưu của họ: RespawnLocation của người chơi là SpawnLocation mà họ quay lại, và mỗi phòng có một điểm như vậy, Checkpoint.
player.RespawnLocation = room.CheckpointPlayers:GetPlayerFromCharacter(hit.Parent) cho biết cơ thể của ai đã chạm vào phần này, hoặc trả về nil.
Thử thách
Trung bìnhĐánh số các căn phòng và biến chúng thành điểm lưu.
- Tạo
leaderstatscho mỗi người chơi với một IntValueRoom. - Trong
addRoom, đặt thuộc tínhNumberthànhcountvàroom.Sign.SurfaceGui.Number.Textthành"Room " .. count. - Viết
setupEntry(room), gọi hàm này cho Lobby và mỗi căn phòng mới: khi chạm vàoroom.Entry, đặt Room của người chơi thành Number của căn phòng đó vàRespawnLocationthànhroom.Checkpoint.
Nhấn Chơi và đi vào phòng 1: biển báo và Room của bạn đều hiển thị 1. 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
-- Trời tối: không có ánh nắng, khắp nơi chỉ có chút ánh sáng 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ở cửa sẽ thêm một phòng, và mỗi phòng đều có 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)
-- Bài học 6: số phòng nằm ở đây
-- Phòng mới ở 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.Parent = rooms
lastRoom = room
setupDoor(room.Door)
return room
end
-- Mỗi người chơi: một chiếc đèn pin cho mỗi lần hồi sinh
Players.PlayerAdded:Connect(function(player)
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