Steigende Flut
Lektion 10 von 18 im Kurs Roblox-Spiel: Katastrophen überleben von Coddy.
Es ist Zeit für die erste Katastrophe. Im Spiel gibt es mehrere, also kommen sie in eine Tabelle, jeweils als Funktion, die die Karte entgegennimmt. Eine in einer Tabelle gespeicherte Funktion wird wie jede andere aufgerufen:
local Disasters = {}
function Disasters.Flood(map)
-- Erzeuge das Wasser und lass es steigen
end
Disasters.Flood(map)Die Flut besteht aus einem breiten blauen Teil, der unter der Insel beginnt und ansteigt, aber nicht bis ganz nach oben: Die Felsen auf der Insel und die Dächer auf den Dächern 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: Gib mit einem TweenInfo an, wie lange es dauern soll, lege die Zielwerte fest und rufe Play auf.
local rise = TweenInfo.new(12, Enum.EasingStyle.Linear)
TweenService:Create(water, rise, { Position = water.Position + Vector3.new(0, 8, 0) }):Play()Das Wasser darf Spieler nicht tragen, also ist CanCollide false und es bleibt Anchored. Wer es berührt, auszuschalten, ist dieselbe Aufgabe, die im ersten Kurs die Lava übernommen hat; in diesem Spiel bekommt die Funktion einen Namen: defeat(hit), denn jede Katastrophe wird sie verwenden.
Ordne das Wasser der Karte unter, damit es zusammen mit der Karte entfernt wird, wenn die Runde endet.
Aufgabe
MittelFüge die Flut hinzu:
- Hole dir oben
TweenService. - Schreibe
defeat(hit): Wennhit.Parentein Humanoid enthält, setze dessen Health auf 0. - Erstelle
local Disasters = {}undfunction Disasters.Flood(map): ein Part namensWaterin der Map, verankert, CanCollide deaktiviert, blau und durchsichtig (Transparency 0.3), in jeder Richtung 10 Studs breiter alsmap.Baseund beginnend 2 Studs darunter. Bei Berührung wird man besiegt. Tweene seine Position überSettings.RoundLength * 0.8Sekunden um 8 Studs nach oben, mit gleichbleibender Geschwindigkeit (Enum.EasingStyle.Linear), sodass es unter den Spitzen der Felsen stoppt. - Rufe
Disasters.Flood(map)direkt nach dem Teleportieren der Spieler auf.
Drücke Play und kämpfe gegen die Flut: Springe auf die Felsen links vom Spawn. Klicke dann auf Check.
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
-- 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
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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Roblox-Spiel: Katastrophen überleben
3Katastrophen
Steigende Flut