Menu
CoddyTech

Uno dopo l'altro

Lezione 5 di 20 del corso Gioco Roblox: Fuga dall’oscurità di Coddy.

Una stanza creata all'inizio dà vita a un gioco con una sola stanza. Il gioco dovrebbe creare una stanza quando si apre una porta: apri la porta della stanza più recente e dietro c'è una nuova stanza.

Questo dà due funzioni che hanno bisogno l'una dell'altra: setupDoor chiama addRoom e addRoom chiama setupDoor. Una variabile locale deve essere dichiarata prima che il codice possa usarla, quindi addRoom viene dichiarata per prima e scritta più avanti:

local addRoom -- declarata qui, definita più sotto

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

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

Quando il conteggio raggiunge Settings.RoomsToEscape, la stanza è il modello Exit: la via d'uscita.

challenge icon

Sfida

Medio
  1. Dichiara local addRoom sopra setupDoor e scrivila come function addRoom().
  2. In setupDoor, prima di aprire: se la porta appartiene a lastRoom, aggiungi una stanza.
  3. In addRoom, usa il modello Exit quando count raggiunge Settings.RoomsToEscape.
  4. Rimuovi la chiamata addRoom() alla fine.

Il mondo di questa lezione ha una via d’uscita breve (3 stanze). Premi Play, poi Check.

Provalo tu

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 stanza più recente
local count = 0 -- stanze create finora

-- Cala la notte: niente sole, un po’ di luce ovunque e nebbia
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")

-- Apri una porta facendola ruotare sui cardini
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

-- Cosa fa una porta quando un giocatore la apre
local function setupDoor(door)
	door.Panel.Prompt.Triggered:Connect(function(player)
		if door:GetAttribute("Open") then
			return
		end
		openDoor(door)
	end)
end
setupDoor(workspace.Rooms.Lobby.Door)

-- Una nuova stanza all’uscita di quella più recente
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()

-- Ogni giocatore: una torcia a ogni nuova vita
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)
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Roblox: Fuga dall’oscurità