Menu
CoddyTech

Der Spinner

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

Die Spinner-Stufe hat einen roten Arm, der über den Laufsteg schwenkt. Es handelt sich um ein Model mit dem Tag Spinner, dessen Drehpunkt die Nabe ist. Wenn du das gesamte Model in jedem Frame ein wenig drehst, dreht es sich.

RunService.Heartbeat wird einmal pro Frame ausgelöst und übergibt dt, die seit dem letzten Frame vergangene Zeit in Sekunden (etwa 1/60). Wenn du es in jedem Frame um speed * dt drehst, summiert sich das pro Sekunde zu speed – unabhängig davon, wie schnell das Spiel läuft.

Ein CFrame besteht aus einer Position und einer Rotation. Durch Multiplikation mit CFrame.Angles wird es gedreht. Die Winkel werden in Bogenmaß angegeben, wandle Grad daher mit math.rad um:

spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(90) * dt, 0))

CollectionService:GetTagged("Spinner") listet alles auf, was dieses Tag trägt, einschließlich der Vorlagen in ServerStorage. Drehe daher nur die Objekte im Workspace. Der Arm trägt das Tag Kill und beendet daher bereits ein Leben. In dieser Lektion ist jede Stufe ein Spinner.

challenge icon

Aufgabe

Mittel
  1. Rufe in der Nähe des Anfangs CollectionService und RunService mit game:GetService ab.
  2. Verbinde RunService.Heartbeat. Schwenke in jedem Frame jedes Model, das mit Spinner getaggt ist und sich im Workspace befindet, um CFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0).

Drücke Play und stimme deinen Lauf am Arm vorbei zeitlich ab oder springe darüber. Klicke dann auf 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)

-- 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

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

-- Wähle zufällig eine stage
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