Sprungfelder
Lektion 9 von 18 im Kurs Roblox-Spiel: Endloser Turm von Coddy.
Die Bounce-Stufe hat ein grünes Pad mit dem Tag Bounce unterhalb eines Vorsprungs, der zu hoch ist, um hinaufzuspringen. Bei der Landung auf dem Pad sollte es dich hinauf auf den Vorsprung schleudern.
Eine Figur bewegt sich mit ihrem HumanoidRootPart, dem unsichtbaren Teil in ihrer Mitte. Setze die AssemblyLinearVelocity dieses Teils, und die Figur fliegt in diese Richtung; anschließend zieht die Schwerkraft sie wieder nach unten:
root.AssemblyLinearVelocity = Vector3.new(0, 60, 0) -- 60 Studs pro Sekunde, gerade nach obenTouched liefert dir das Glied, das das Pad berührt hat, normalerweise ein Bein. Sein übergeordnetes Objekt ist die Figur, die den HumanoidRootPart enthält.
Aufgabe
Mittel- Schreibe
bounce(hit): Wenn das Modell des Berührenden einHumanoidRootParthat, setze dessenAssemblyLinearVelocityaufVector3.new(0, Settings.BouncePower, 0). - Verbinde in
setupStagedas Touched-Ereignis jedes mitBouncemarkierten Teils damit.
Drücke Play, lande auf dem Pad und steuere dich auf den Vorsprung. 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 TweenService = game:GetService("TweenService")
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
-- Eine verschwindende Stufe wird kurz nachdem jemand auf ihr landet unsichtbar und erscheint dann wieder
local function makeVanish(part)
part.Touched:Connect(function(hit)
if part:GetAttribute("Gone") or not hit.Parent:FindFirstChild("Humanoid") then
return
end
part:SetAttribute("Gone", true)
task.wait(Settings.VanishDelay)
part.Transparency = 0.8
part.CanCollide = false
task.wait(Settings.VanishTime)
part.Transparency = 0
part.CanCollide = true
part:SetAttribute("Gone", nil)
end)
end
-- Ein Laser gleitet endlos zu seinem Slide-Versatz und zurück
local function makeSlide(part)
local info = TweenInfo.new(Settings.SlideTime, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true)
local goal = { Position = part.Position + part:GetAttribute("Slide") }
TweenService:Create(part, info, goal):Play()
end
-- Spinners drehen sich in jedem Frame ein Stück
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 alle Hindernisse in einer Etappe anhand ihrer Tags
local function setupStage(stage)
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
if part:HasTag("Vanish") then
makeVanish(part)
end
if part:HasTag("Conveyor") then
part.AssemblyLinearVelocity = part.CFrame.LookVector * Settings.BeltSpeed
end
if part:HasTag("Slider") then
makeSlide(part)
end
end
end
-- Eine zufällig ausgewählte Etappe
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.