Menu
CoddyTech

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

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

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

challenge icon

Desafio

Fácil
  1. Escreva killOnTouch(hit): se o modelo de quem tocou tiver um Humanoid, defina seu Health como 0.
  2. Escreva setupStage(stage): para cada peça em stage:GetDescendants() marcada com Kill, conecte seu Touched a killOnTouch.
  3. Em buildTower, chame setupStage(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()
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Jogo de Roblox: Torre Infinita