Dentro la torre
Lezione 12 di 18 del corso Gioco Roblox: Torre infinita di Coddy.
Quando termina il conto alla rovescia, inizia il round: costruisci la torre, avvia la lava e sposta tutti i giocatori sul primo livello. Tieni i livelli in una tabella mentre li costruisci, così towerStages[1] è il livello più in basso:
towerStages[i] = stageUn personaggio è un Model, quindi PivotTo lo sposta tutto intero. Posizionalo qualche stud sopra il pad Start, non al suo interno, e atterrerà sopra:
player.Character:PivotTo(towerStages[1].Start.CFrame + Vector3.new(0, 4, 0))Poi il tabellone fa il conto alla rovescia del round, proprio come nella lobby.
Sfida
Medio- Vicino all'inizio:
local towerStages = {}. InbuildTower, svuotala all'inizio e memorizza ogni sezione cometowerStages[i] = stage. - Scrivi
startRound(): costruisci la torre, avvia la lava e sposta il personaggio di ogni giocatore a 4 studs sopratowerStages[1].Start. - In fondo: dopo il conto alla rovescia nella lobby, chiama
startRound(), poi fai il conto alla rovescia daSettings.RoundLength, mostrandoClimb! 20 seconds left,Climb! 19 seconds left, ...
Premi Gioca. Poi Controlla.
Provalo tu
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Settings = require(game.ReplicatedStorage.Settings)
local stages = ServerStorage.Stages
local tower = nil
local lava = nil
print("Each tower has " .. Settings.StageCount .. " stages")
-- Ogni giocatore ottiene Wins nella classifica
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local wins = Instance.new("IntValue")
wins.Name = "Wins"
wins.Parent = leaderstats
end)
-- Il tabellone nella lobby
local gui = Instance.new("SurfaceGui")
gui.Parent = workspace.Lobby.Board
local boardLabel = Instance.new("TextLabel")
boardLabel.Name = "Status"
boardLabel.Size = UDim2.fromScale(1, 1)
boardLabel.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
boardLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
boardLabel.TextScaled = true
boardLabel.Text = "Endless Tower"
boardLabel.Parent = gui
local function setBoard(text)
boardLabel.Text = text
end
-- Qualsiasi cosa con il tag Kill fa perdere una vita
local function killOnTouch(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Una piattaforma a scomparsa svanisce poco dopo che qualcuno ci atterra sopra, poi riappare
local function makeVanish(part)
part.Touched:Connect(function(hit)
if part:GetAttribute("Gone") or not hit.Parent:FindFirstChild("Humanoid") then
return
end
part:SetAttribute("Gone", true)
task.wait(Settings.VanishDelay)
part.Transparency = 0.8
part.CanCollide = false
task.wait(Settings.VanishTime)
part.Transparency = 0
part.CanCollide = true
part:SetAttribute("Gone", nil)
end)
end
-- Un laser scorre fino alla posizione indicata da Slide e torna indietro, all'infinito
local function makeSlide(part)
local info = TweenInfo.new(Settings.SlideTime, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true)
local goal = { Position = part.Position + part:GetAttribute("Slide") }
TweenService:Create(part, info, goal):Play()
end
-- Una piattaforma rimbalzante lancia in aria chiunque ci atterri sopra
local function bounce(hit)
local root = hit.Parent:FindFirstChild("HumanoidRootPart")
if root then
root.AssemblyLinearVelocity = Vector3.new(0, Settings.BouncePower, 0)
end
end
-- Gli Spinner ruotano un po' a ogni frame
RunService.Heartbeat:Connect(function(dt)
for _, spinner in CollectionService:GetTagged("Spinner") do
if spinner:IsDescendantOf(workspace) then
spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0))
end
end
end)
-- Attiva ogni ostacolo in una fase in base ai suoi tag
local function setupStage(stage)
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
if part:HasTag("Vanish") then
makeVanish(part)
end
if part:HasTag("Conveyor") then
part.AssemblyLinearVelocity = part.CFrame.LookVector * Settings.BeltSpeed
end
if part:HasTag("Slider") then
makeSlide(part)
end
if part:HasTag("Bounce") then
part.Touched:Connect(bounce)
end
end
end
-- Scegli una fase a caso
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- Metti una copia di un modello in cima alla torre; restituisce la copia e la nuova altezza massima
local function stack(template, bottom)
local copy = template:Clone()
local box, size = copy:GetBoundingBox()
local lift = bottom - (box.Position.Y - size.Y / 2)
copy:PivotTo(copy:GetPivot() + Vector3.new(0, lift, 0))
copy.Parent = tower
return copy, bottom + size.Y
end
-- Costruisci una nuova torre casuale, dal basso verso l'alto
local function buildTower()
tower = Instance.new("Model")
tower.Name = "Tower"
tower.Parent = workspace
local top = 0
for i = 1, Settings.StageCount do
local stage, newTop = stack(pickStage(), top)
top = newTop
setupStage(stage)
end
stack(ServerStorage.Finish, top)
return top
end
-- La lava sale dal terreno fino a poco sotto la cima della torre
local function startLava(top)
lava = Instance.new("Part")
lava.Name = "Lava"
lava.Anchored = true
lava.CanCollide = false
lava.Size = Vector3.new(30, 2, 30)
lava.Position = Vector3.new(0, -2, 0)
lava.Color = Color3.fromRGB(255, 90, 20)
lava.Material = Enum.Material.Neon
lava.Parent = workspace
lava.Touched:Connect(killOnTouch)
local info = TweenInfo.new(top / Settings.LavaSpeed, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, 0, false, Settings.LavaDelay)
TweenService:Create(lava, info, { Position = Vector3.new(0, top - 2, 0) }):Play()
end
-- Fai il conto alla rovescia, poi costruisci la torre
for i = Settings.Intermission, 1, -1 do
setBoard("Next tower in " .. i)
task.wait(1)
end
local top = buildTower()
startLava(top)
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Gioco Roblox: Torre infinita
4Trasformalo in un gioco
Livello nella classifica