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 = falseTouched 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.
Aufgabe
MittelSchreibe 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:
- Setze das Attribut
Goneauf true. - Warte
Settings.VanishDelay, setze dann Transparency auf 0.8 und CanCollide auf false. - Warte
Settings.VanishTime, setze sie dann wieder auf 0 und true und löscheGone(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()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.