Menu
CoddyTech

Verschwindende Stufen

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

Glasstufen mit dem Tag Vanish verblassen kurz nachdem du auf einer landest und kommen dann zurück. Durch ein Teil mit deaktiviertem CanCollide kannst du hindurchgehen, und mit einer hohen Transparency sieht es verschwunden aus:

part.Transparency = 0.8
part.CanCollide = false

Touched wird für jedes Glied ausgelöst, das die Stufe berührt, und erneut, während du durch die Stufe fällst. Ohne eine Prüfung startet jede Berührung ihr eigenes Verblassen, und die Stufe flackert noch lange, nachdem du sie verlassen hast. Eine Entprellung lässt nur die erste Berührung durch: Markiere die Stufe, solange sie beschäftigt ist, und ignoriere Berührungen, solange die Markierung vorhanden ist.

if part:GetAttribute("Gone") then
	return
end
part:SetAttribute("Gone", true)
-- ausblenden, warten, wieder einblenden
part:SetAttribute("Gone", nil)

Das Warten findet innerhalb der Touched-Funktion statt, die Roblox eigenständig ausführt, sodass es den Rest des Spiels niemals aufhält.

challenge icon

Aufgabe

Mittel

Schreibe makeVanish(part) und verwende es für jeden Teil, der in setupStage mit Vanish markiert ist. Wenn etwas mit einem Humanoid die Stufe berührt und sie noch nicht verschwunden ist:

  1. Setze das Attribut Gone auf true.
  2. Warte Settings.VanishDelay, setze dann Transparency auf 0.8 und CanCollide auf false.
  3. Warte Settings.VanishTime, setze sie dann wieder auf 0 und true und lösche Gone (setze es auf nil).

Drücke Play und bewege dich weiter. Wähle dann Check.

Probier es selbst

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
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)

-- Alles mit dem Tag Kill beendet ein Leben
local function killOnTouch(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end

-- Spinners drehen sich bei jedem Frame ein wenig
RunService.Heartbeat:Connect(function(dt)
	for _, spinner in CollectionService:GetTagged("Spinner") do
		if spinner:IsDescendantOf(workspace) then
			spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0))
		end
	end
end)

-- Aktiviere jedes Hindernis in einer Stage anhand seiner Tags
local function setupStage(stage)
	for _, part in stage:GetDescendants() do
		if part:HasTag("Kill") then
			part.Touched:Connect(killOnTouch)
		end
	end
end

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

-- Setze eine Kopie eines Modells oben auf den 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
		setupStage(stage)
	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