Blocos mortais
Lição 4 de 18 do curso Jogo de Roblox: Torre Infinita da Coddy.
Todo obby tem peças vermelhas que você não deve tocar. Nas fases, elas são marcadas com uma tag, um rótulo que você pode colocar em qualquer instância. As faixas vermelhas têm a tag Kill:
print(part:HasTag("Kill")) --> trueAs tags são como jogos grandes continuam simples: quem cria as fases apenas adiciona uma tag a uma peça, e uma função faz todas as peças marcadas funcionarem. As fases da sua torre são cópias, então configure-as depois que forem criadas. GetDescendants lista todas as peças dentro de uma fase, por mais profundas que estejam:
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
endPara encerrar uma vida, defina Health do Humanoid como 0. Um toque pode vir de qualquer coisa, então primeiro verifique se o modelo de quem tocou tem um Humanoid. Nesta lição, todas as fases são KillBricks, então você pode experimentar.
Desafio
Fácil- Escreva
killOnTouch(hit): se o modelo de quem tocou tiver um Humanoid, defina seu Health como 0. - Escreva
setupStage(stage): para cada peça emstage:GetDescendants()marcada comKill, conecte seuTouchedakillOnTouch. - Em
buildTower, chamesetupStage(stage)para cada estágio que você empilhar.
Pressione Play e pule sobre as faixas vermelhas. Depois, Check.
Experimente você mesmo
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")
-- Cada jogador recebe Wins no placar de líderes
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)
-- Uma fase qualquer, escolhida aleatoriamente
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- Coloca uma cópia de um modelo no topo da torre; retorna a cópia e a nova altura do topo
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
-- Constrói uma nova torre aleatória, de baixo para cima
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()
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.