Menu
CoddyTech

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 = false

Touched 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.

challenge icon

Sfida

Medio

Scrivi 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:

  1. Imposta l'attributo Gone su true.
  2. Attendi Settings.VanishDelay, poi imposta Transparency su 0.8 e CanCollide su false.
  3. Attendi Settings.VanishTime, poi reimpostali su 0 e true e cancella Gone (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()
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: Torre infinita