Inondazione crescente
Lezione 10 di 18 del corso Gioco Roblox: Sopravvivenza ai disastri di Coddy.
È il momento del primo disastro. Ce ne saranno diversi nel gioco, quindi li mettiamo tutti in una tabella, ciascuno come funzione che riceve la mappa. Una funzione memorizzata in una tabella si richiama come qualsiasi altra:
local Disasters = {}
function Disasters.Flood(map)
-- crea l'acqua e alzala
end
Disasters.Flood(map)L’alluvione è una parte blu e ampia che inizia sotto l’isola e si solleva, ma non fino in cima: le rocce sull’Island e i tetti sui Rooftops restano asciutti, così un giocatore che si arrampica in tempo sopravvive. Un disastro a cui nessuno può sopravvivere non è un gioco. TweenService cambia una proprietà gradualmente nel tempo: descrivi la durata con un TweenInfo, indica i valori obiettivo e usa Play.
local rise = TweenInfo.new(12, Enum.EasingStyle.Linear)
TweenService:Create(water, rise, { Position = water.Position + Vector3.new(0, 8, 0) }):Play()L’acqua non deve sostenere i giocatori, quindi CanCollide è false e resta Anchored. Sconfiggere chiunque la tocchi è lo stesso compito svolto dalla lava nel primo corso; in questo gioco la funzione ha un nome, defeat(hit), perché verrà usata da ogni disastro.
Imposta la mappa come genitore dell’acqua, così quando la mappa viene distrutta alla fine del round, l’acqua verrà rimossa insieme a essa.
Sfida
MedioAggiungi l’alluvione:
- Recupera
TweenServiceall’inizio. - Scrivi
defeat(hit): sehit.Parentha un Humanoid, imposta la sua Health su 0. - Crea
local Disasters = {}efunction Disasters.Flood(map): una parte chiamataWaternella mappa, ancorata, con CanCollide disattivato, blu e trasparente (Transparency 0.3), più larga di 10 stud rispetto amap.Basein ogni direzione, con il punto di partenza 2 stud più in basso. Toccarla sconfigge il giocatore. Anima la sua Position di 8 stud verso l’alto nell’arco diSettings.RoundLength * 0.8secondi, a velocità costante (Enum.EasingStyle.Linear), così si ferma sotto la cima delle rocce. - Chiama
Disasters.Flood(map)subito dopo aver teletrasportato i giocatori.
Premi Play e gareggia contro la marea: salta sulle rocce a sinistra dello spawn. Poi premi Check.
Provalo tu
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")
-- Ogni giocatore ottiene Wins nella classifica
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)
-- Il tabellone di stato nella 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
-- Il ciclo dei round
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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Gioco Roblox: Sopravvivenza ai disastri
3Disastri
Inondazione crescente