Menu
CoddyTech

Steigendes Hochwasser

Lektion 11 von 20 im Kurs Roblox-Spiel: Katastrophen überleben von Coddy.

Wasser, das unter der Insel wartet, lässt sich leicht vermeiden. Eine Flut steigt, aber nicht bis ganz nach oben: Die Felsen auf der Island und die Dächer auf Rooftops bleiben trocken, sodass ein Spieler, der rechtzeitig hinaufklettert, überlebt. Eine Katastrophe, die niemand überleben kann, ist kein Spiel.

TweenService ändert eine Eigenschaft im Laufe der Zeit gleichmäßig: Beschreibe mit einem TweenInfo, wie lange es dauern soll, gib die Zielwerte in einer Tabelle an und starte es mit Play:

local rise = TweenInfo.new(6, Enum.EasingStyle.Linear)
TweenService:Create(water, rise, { Position = water.Position + Vector3.new(0, 3, 0) }):Play()

Enum.EasingStyle.Linear sorgt für ein gleichmäßiges Tempo; die Standardeinstellung beginnt schnell und wird dann langsamer. Die Tween-Animation läuft von selbst, sodass der Countdown der Runde weiterläuft, während das Wasser steigt.

challenge icon

Aufgabe

Mittel

Lass die Flut über der Insel ansteigen.

  1. Rufe TweenService ganz oben ab.
  2. Erzeuge am Ende von Disasters.Flood eine Tween-Animation für die Position des Wassers: Es soll sich innerhalb von Settings.RoundLength * 0.8 Sekunden um 8 Studs nach oben bewegen. Verwende dabei Enum.EasingStyle.Linear.

Drücke „Spielen“: Das Wasser steigt über die Insel und bleibt unterhalb der Felsgipfel stehen. Klicke dann auf „Prüfen“.

Probier es selbst

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local lobbySpawn = workspace.LobbySpawn

print("Rounds last " .. Settings.RoundLength .. " seconds")

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

-- Die Statustafel in der Lobby
local gui = Instance.new("SurfaceGui")
gui.Parent = workspace.StatusBoard

local status = Instance.new("TextLabel")
status.Name = "Status"
status.Size = UDim2.fromScale(1, 1)
status.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
status.TextColor3 = Color3.fromRGB(255, 255, 255)
status.TextScaled = true
status.Text = "Welcome to Disaster Survival!"
status.Parent = gui

local function setStatus(text)
	status.Text = text
end

local function teleport(player, target)
	local character = player.Character
	if character then
		character:PivotTo(target.CFrame + Vector3.new(0, 4, 0))
	end
end

local function defeat(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end

-- Die Katastrophen, nach Namen geordnet
local Disasters = {}

function Disasters.Flood(map)
	local base = map.Base
	local water = Instance.new("Part")
	water.Name = "Water"
	water.Anchored = true
	water.CanCollide = false
	water.Transparency = 0.3
	water.Color = Color3.fromRGB(40, 120, 255)
	water.Size = Vector3.new(base.Size.X + 10, 1, base.Size.Z + 10)
	water.Position = base.Position - Vector3.new(0, 2, 0)
	water.Parent = map
	water.Touched:Connect(defeat)
	-- Lektion 11: Hier kommt Rising Flood hin
end

-- Die Rundenschleife
while true do
	for seconds = Settings.Intermission, 1, -1 do
		setStatus("Intermission: " .. seconds)
		task.wait(1)
	end

	local map = ServerStorage.Maps.Island:Clone()
	map.Name = "Map"
	map.Parent = workspace

	local survivors = {}
	for _, player in Players:GetPlayers() do
		local character = player.Character
		if character and character.Humanoid.Health > 0 then
			teleport(player, map.Spawn)
			survivors[player] = true
			character.Humanoid.Died:Connect(function()
				survivors[player] = nil
			end)
		end
	end

	Disasters.Flood(map)
	for seconds = Settings.RoundLength, 1, -1 do
		setStatus("Time left: " .. seconds)
		task.wait(1)
	end

	local names = {}
	for player in survivors do
		player.leaderstats.Wins.Value += 1
		teleport(player, lobbySpawn)
		table.insert(names, player.Name)
	end
	map:Destroy()
	if #names > 0 then
		setStatus("Winners: " .. table.concat(names, ", "))
	else
		setStatus("Nobody survived!")
	end
	task.wait(3)
end

Alle Lektionen in Roblox-Spiel: Katastrophen überleben

Übe selbstständig: Roblox-Playground