Menu
CoddyTech

Tödliche Blöcke

Lektion 4 von 18 im Kurs Roblox-Spiel: Endloser Turm von Coddy.

Jeder Obby hat rote Teile, die du nicht berühren darfst. In den Stages sind sie mit einem Tag markiert, einer Kennzeichnung, die du jeder Instanz zuweisen kannst. Die roten Streifen tragen den Tag Kill:

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

Mit Tags bleiben auch große Spiele einfach: Der Builder der Stage versieht ein Teil nur mit einem Tag, und eine Funktion sorgt dafür, dass jedes markierte Teil funktioniert. Die Stages deines Turms sind Kopien, also richte sie ein, nachdem sie erstellt wurden. GetDescendants listet jedes Teil innerhalb einer Stage auf, egal wie tief es verschachtelt ist:

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

Um ein Leben zu beenden, setze die Health des Humanoids auf 0. Eine Berührung kann von allem Möglichen kommen, prüfe also zuerst, ob das Modell des Berührenden einen Humanoid hat. In dieser Lektion ist jede Stage ein KillBrick, also kannst du es ausprobieren.

challenge icon

Aufgabe

Einfach
  1. Schreibe killOnTouch(hit): Wenn das Modell des Berührenden einen Humanoid hat, setze dessen Health auf 0.
  2. Schreibe setupStage(stage): Verbinde bei jedem mit Kill markierten Teil in stage:GetDescendants() dessen Touched mit killOnTouch.
  3. Rufe in buildTower für jede gestapelte Stage setupStage(stage) auf.

Drücke Play und springe über die roten Streifen. Dann Check.

Probier es selbst

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

-- Jeder Spieler erhält Wins auf der Bestenliste
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)

-- Eine beliebige Stage, zufällig ausgewählt
local function pickStage()
	local all = stages:GetChildren()
	return all[math.random(1, #all)]
end

-- Platziere eine Kopie eines Modells oben auf dem Turm; gibt die Kopie und die neue Oberkante zurück
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

-- Baue einen neuen zufälligen Turm von unten nach oben
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 dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Roblox-Spiel: Endloser Turm