Menu
CoddyTech

Uno tras otro

Lección 5 de 25 del curso Juego de Roblox: Escapa de la oscuridad de Coddy.

Una habitación creada al principio da como resultado un juego de una sola habitación. El juego debe crear una habitación cuando se abra una puerta: abre la puerta de la habitación más nueva y habrá una habitación nueva detrás.

Eso requiere dos funciones que se necesitan mutuamente: setupDoor llama a addRoom, y addRoom llama a setupDoor. Hay que declarar una variable local antes de que el código pueda usarla, así que addRoom se declara primero y se escribe después:

local addRoom -- declarada aquí, definida más abajo

local function setupDoor(door)
	-- ... addRoom() ...
end

function addRoom()
	-- ... setupDoor(room.Door) ...
end

Cuando el recuento llega a Settings.RoomsToEscape (10), la habitación usa la plantilla Exit, que tiene una puerta verde. Por ahora se abre como cualquier otra; en el capítulo 4 se convertirá en la salida.

challenge icon

Desafío

Intermedio

Crea una habitación nueva detrás de cada puerta que abras.

  1. Declara local addRoom antes de setupDoor y escríbela debajo como function addRoom(). Elimina la llamada addRoom() del final.
  2. En setupDoor, antes de abrir: si door.Parent == lastRoom, llama a addRoom().
  3. En addRoom, usa la plantilla "Exit" cuando count >= Settings.RoomsToEscape.

Pulsa «Jugar» y abre tres puertas: detrás de cada una te espera una habitación nueva. Después, pulsa «Comprobar».

Pruébalo tú mismo

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 -- la sala más reciente
local count = 0 -- salas creadas hasta ahora

-- Cae la noche: no hay sol, hay un poco de luz por todas partes y niebla
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")

-- Abre una puerta girándola sobre sus bisagras
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

-- Lo que hace una puerta cuando un jugador la abre
local function setupDoor(door)
	door.Panel.Prompt.Triggered:Connect(function(player)
		if door:GetAttribute("Open") then
			return
		end
		-- Lección 5: Uno tras otro va aquí
		openDoor(door)
	end)
end
setupDoor(workspace.Rooms.Lobby.Door)

-- Una sala nueva a la salida de la más reciente
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()

-- Cada jugador: una linterna en cada vida
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)

Todas las lecciones de Juego de Roblox: Escapa de la oscuridad

Practica por tu cuenta: Playground de Roblox