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) ...
endCuando 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.
Desafío
IntermedioCrea una habitación nueva detrás de cada puerta que abras.
- Declara
local addRoomantes desetupDoory escríbela debajo comofunction addRoom(). Elimina la llamadaaddRoom()del final. - En
setupDoor, antes de abrir: sidoor.Parent == lastRoom, llama aaddRoom(). - En
addRoom, usa la plantilla"Exit"cuandocount >= 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