Laser scorrevoli
Lezione 8 di 18 del corso Gioco Roblox: Torre infinita di Coddy.
La fase Lasers ha due pareti rosse, contrassegnate con Slider e Kill, che scorrono avanti e indietro lungo il passaggio. Ognuna ha un attributo, Slide, un Vector3 che indica dove va rispetto al punto di partenza.
Un tween può ripetersi. TweenInfo.new accetta il tempo, l’easing, una direzione, quante volte ripetere (-1 significa per sempre) e se riprodurre al contrario:
local info = TweenInfo.new(2.5, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true)
TweenService:Create(part, info, { Position = part.Position + part:GetAttribute("Slide") }):Play()Linear mantiene costante la velocità, così un giocatore può valutarla. L’easing predefinito rallenta a ogni estremità: l’effetto è fluido, ma è difficile calcolare il momento giusto.
Sfida
Medio- Vicino all'inizio, recupera
TweenService. - Scrivi
makeSlide(part): anima la Position della parte fino alla sua Position più il suo attributoSlide, impiegandoSettings.SlideTimesecondi, con andamento Linear, ripetendo per sempre e invertendo la direzione. - In
setupStage, chiamala per ogni parte contrassegnata conSlider.
Premi Gioca e schiva i laser. Poi Verifica.
Provalo tu
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local Settings = require(game.ReplicatedStorage.Settings)
local stages = ServerStorage.Stages
local tower = nil
print("Each tower has " .. Settings.StageCount .. " stages")
-- Ogni giocatore riceve 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)
-- Qualsiasi oggetto con il tag Kill toglie una vita
local function killOnTouch(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Una piattaforma a scomparsa diventa trasparente poco dopo che qualcuno ci atterra, 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
-- Le piattaforme rotanti girano 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 tutti gli ostacoli di un livello in base ai loro 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
end
end
-- Scegli un livello 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; restituisci la copia e la nuova altezza della cima
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)
end
buildTower()
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 classifica2Ostacoli
La girandola