Lần lượt
Bài học 5 trên 25 trong khóa học Trò chơi Roblox: thoát khỏi bóng tối của Coddy.
Một căn phòng được tạo lúc bắt đầu sẽ tạo nên trò chơi chỉ có một căn phòng. Trò chơi nên tạo phòng khi cửa mở: mở cửa của căn phòng mới nhất, và một căn phòng mới sẽ xuất hiện phía sau.
Việc này cần hai hàm gọi lẫn nhau: setupDoor gọi addRoom, và addRoom gọi setupDoor. Phải khai báo biến cục bộ trước khi dùng trong code, vì vậy khai báo addRoom trước rồi viết hàm này sau:
local addRoom -- khai báo ở đây, gán giá trị ở bên dưới
local function setupDoor(door)
-- ... addRoom() ...
end
function addRoom()
-- ... setupDoor(room.Door) ...
endKhi số lượng đạt Settings.RoomsToEscape (10), căn phòng đó sẽ dùng mẫu Exit, với cửa màu xanh lá. Hiện tại, cửa này mở như mọi cửa khác; chương 4 sẽ biến nó thành lối thoát.
Thử thách
Trung bìnhTạo một phòng mới phía sau mỗi cánh cửa bạn mở.
- Khai báo
local addRoomphía trênsetupDoorvà viết hàm này bên dưới dưới dạngfunction addRoom(). Xóa lời gọiaddRoom()ở cuối. - Trong
setupDoor, trước khi mở cửa: nếudoor.Parent == lastRoom, hãy gọiaddRoom(). - Trong
addRoom, dùng mẫu"Exit"khicount >= Settings.RoomsToEscape.
Nhấn Chơi rồi mở ba cánh cửa: phía sau mỗi cánh cửa sẽ có một phòng mới. 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 -- căn 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 nắng, á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
-- Cửa sẽ làm gì khi người chơi mở nó
local function setupDoor(door)
door.Panel.Prompt.Triggered:Connect(function(player)
if door:GetAttribute("Open") then
return
end
-- Bài học 5: Từng phòng nối tiếp nhau nằm ở đây
openDoor(door)
end)
end
setupDoor(workspace.Rooms.Lobby.Door)
-- Một căn phòng mới tại lối ra của căn phòng mới nhất
local function addRoom()
count += 1
local name = Settings.Order[(count - 1) % #Settings.Order + 1]
local room = ServerStorage.Rooms[name]:Clone()
room:PivotTo(lastRoom.Exit.CFrame)
room.Parent = rooms
lastRoom = room
setupDoor(room.Door)
return room
end
addRoom()
-- 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