Menu
CoddyTech

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 oben

Touched liefert dir das Glied, das das Pad berührt hat, normalerweise ein Bein. Sein übergeordnetes Objekt ist die Figur, die den HumanoidRootPart enthält.

challenge icon

Aufgabe

Mittel
  1. Schreibe bounce(hit): Wenn das Modell des Berührenden ein HumanoidRootPart hat, setze dessen AssemblyLinearVelocity auf Vector3.new(0, Settings.BouncePower, 0).
  2. Verbinde in setupStage das Touched-Ereignis jedes mit Bounce markierten 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()
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