Menu
CoddyTech

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")) --> true

I 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
end

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

challenge icon

Sfida

Facile
  1. Scrivi killOnTouch(hit): se il modello di chi tocca ha un Humanoid, imposta la sua Health a 0.
  2. Scrivi setupStage(stage): per ogni parte in stage:GetDescendants() con il tag Kill, collega la sua Touched a killOnTouch.
  3. In buildTower, chiama setupStage(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()
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