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")) --> trueMit 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
endUm 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.
Aufgabe
Einfach- Schreibe
killOnTouch(hit): Wenn das Modell des Berührenden einen Humanoid hat, setze dessen Health auf 0. - Schreibe
setupStage(stage): Verbinde bei jedem mitKillmarkierten Teil instage:GetDescendants()dessenTouchedmitkillOnTouch. - Rufe in
buildTowerfür jede gestapelte StagesetupStage(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()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.