Blocchi letali
Lezione 4 di 18 del corso Gioco Roblox: Torre infinita di Coddy.
Ogni obby ha parti rosse che non devi toccare. Negli stage sono contrassegnate con un tag, un'etichetta che puoi assegnare a qualsiasi istanza. Le strisce rosse hanno il tag Kill:
print(part:HasTag("Kill")) --> trueI tag permettono ai giochi di grandi dimensioni di rimanere semplici: chi costruisce lo stage assegna un tag a una parte e una funzione fa funzionare tutte le parti contrassegnate. Gli stage della tua torre sono copie, quindi configúrali dopo averli creati. GetDescendants elenca tutte le parti all'interno di uno stage, a qualsiasi profondità:
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
endPer terminare una vita, imposta Health dell'Humanoid su 0. Un tocco può provenire da qualsiasi cosa, quindi controlla prima che il modello di chi tocca abbia un Humanoid. In questa lezione ogni stage è composto da KillBricks, quindi puoi provarlo.
Sfida
Facile- Scrivi
killOnTouch(hit): se il modello di chi tocca ha un Humanoid, imposta la sua Health a 0. - Scrivi
setupStage(stage): per ogni parte instage:GetDescendants()con il tagKill, collega la suaTouchedakillOnTouch. - In
buildTower, chiamasetupStage(stage)per ogni sezione che impili.
Premi Play e salta oltre le strisce rosse. Poi premi Check.
Provalo tu
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local stages = ServerStorage.Stages
local tower = 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)
-- Una fase qualsiasi, scelta a caso
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- Posiziona 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
-- Costruisce 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
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 classifica