Gradini che scompaiono
Lezione 6 di 18 del corso Gioco Roblox: Torre infinita di Coddy.
I gradini di vetro contrassegnati con Vanish scompaiono poco dopo che ci atterri sopra, poi ricompaiono. Una parte con CanCollide disattivato può essere attraversata e, con un valore elevato di Transparency, sembra scomparsa:
part.Transparency = 0.8
part.CanCollide = falseTouched si attiva per ogni arto che tocca il gradino e di nuovo mentre lo attraversi cadendo. Senza un controllo, ogni contatto avvia la propria dissolvenza e il gradino continua a sfarfallare a lungo dopo che te ne sei andato. Un debounce lascia passare solo il primo: contrassegna il gradino mentre è occupato e ignora i contatti finché il contrassegno è presente.
if part:GetAttribute("Gone") then
return
end
part:SetAttribute("Gone", true)
-- svanisci, aspetta, riappari
part:SetAttribute("Gone", nil)L'attesa avviene all'interno della funzione Touched, che Roblox esegue autonomamente, quindi non rallenta mai il resto del gioco.
Sfida
MedioScrivi makeVanish(part) e usala per ogni parte contrassegnata con Vanish in setupStage. Quando qualcosa con un Humanoid tocca il gradino e questo non è già scomparso:
- Imposta l'attributo
Gonesu true. - Attendi
Settings.VanishDelay, poi imposta Transparency su 0.8 e CanCollide su false. - Attendi
Settings.VanishTime, poi reimpostali su 0 e true e cancellaGone(impostalo su nil).
Premi Play e continua a muoverti. Poi Check.
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 cosa contrassegnata con Kill pone fine a una vita
local function killOnTouch(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Gli oggetti 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 tutti gli ostacoli di uno stage 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
end
end
-- Scegli uno stage 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 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