Menu
CoddyTech

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) ...
end

Khi 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.

challenge icon

Thử thách

Trung bình

Tạo một phòng mới phía sau mỗi cánh cửa bạn mở.

  1. Khai báo local addRoom phía trên setupDoor và viết hàm này bên dưới dưới dạng function addRoom(). Xóa lời gọi addRoom() ở cuối.
  2. Trong setupDoor, trước khi mở cửa: nếu door.Parent == lastRoom, hãy gọi addRoom().
  3. Trong addRoom, dùng mẫu "Exit" khi count >= 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