Menu
CoddyTech

Bloques mortales

Lección 4 de 18 del curso Juego de Roblox: Torre infinita de Coddy.

Todo obby tiene partes rojas que no debes tocar. En las etapas están marcadas con una etiqueta, un rótulo que puedes poner en cualquier instancia. Las franjas rojas llevan la etiqueta Kill:

print(part:HasTag("Kill")) --> true

Las etiquetas permiten que los juegos grandes sigan siendo sencillos: quien construye las etapas solo etiqueta una parte, y una función hace que todas las partes etiquetadas funcionen. Las etapas de tu torre son copias, así que configúralas después de que se hayan construido. GetDescendants enumera todas las partes dentro de una etapa, sin importar qué tan profundas estén:

for _, part in stage:GetDescendants() do
	if part:HasTag("Kill") then
		part.Touched:Connect(killOnTouch)
	end
end

Para acabar con una vida, establece Health del Humanoid en 0. Un toque puede provenir de cualquier cosa, así que comprueba primero que el modelo de quien toca tenga un Humanoid. En esta lección, todas las etapas son KillBricks, así que puedes probarlo.

challenge icon

Desafío

Fácil
  1. Escribe killOnTouch(hit): si el modelo de quien toca tiene un Humanoid, establece su Health en 0.
  2. Escribe setupStage(stage): para cada parte de stage:GetDescendants() etiquetada como Kill, conecta su Touched a killOnTouch.
  3. En buildTower, llama a setupStage(stage) para cada etapa que apiles.

Pulsa Play y salta por encima de las franjas rojas. Después, Check.

Pruébalo tú mismo

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 jugador recibe Wins en la tabla de clasificación
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)

-- Cualquier etapa, elegida al azar
local function pickStage()
	local all = stages:GetChildren()
	return all[math.random(1, #all)]
end

-- Coloca una copia de un modelo encima de la torre; devuelve la copia y la nueva altura máxima
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

-- Construye una nueva torre aleatoria de abajo hacia arriba
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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Roblox: Torre infinita