Lũ dâng
Bài học 11 trên 20 trong khóa học Trò chơi Roblox: sinh tồn trước thảm họa của Coddy.
Nước chờ bên dưới hòn đảo rất dễ tránh. Nước lũ dâng lên, nhưng không dâng đến đỉnh: đá trên Đảo và mái nhà trên Những mái nhà vẫn khô ráo, nên người chơi leo lên kịp thời sẽ sống sót. Một thảm họa không ai có thể sống sót thì không phải là trò chơi.
TweenService thay đổi thuộc tính một cách mượt mà theo thời gian: mô tả thời lượng bằng TweenInfo, đặt các giá trị mục tiêu trong một bảng, rồi gọi 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 duy trì tốc độ ổn định; kiểu mặc định bắt đầu nhanh rồi chậm dần. Tween tự chạy, nên thời gian đếm ngược của vòng chơi vẫn tiếp tục trong lúc nước dâng.
Thử thách
Trung bìnhHãy làm nước lũ dâng lên trên hòn đảo.
- Lấy
TweenServiceở đầu tệp. - Ở cuối
Disasters.Flood, tạo hiệu ứng chuyển động cho Position của nước lên cao 8 studs trongSettings.RoundLength * 0.8giây, vớiEnum.EasingStyle.Linear.
Nhấn Chơi: nước dâng lên trên hòn đảo và dừng lại bên dưới đỉnh các tảng đá. Sau đó nhấn Kiểm tra.
Tự làm thử
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")
-- Mỗi người chơi đều có Wins trên bảng xếp hạng
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)
-- Bảng trạng thái trong sảnh chờ
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
-- Các thảm họa theo tên
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)
-- Bài học 11: thêm Rising Flood vào đây
end
-- Vòng lặp các vòng chơi
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
Tất cả bài học trong Trò chơi Roblox: sinh tồn trước thảm họa
4Biến mọi thứ thành trò chơi
Hai bản đồ2Bản đồ và người chơi
Tải bản đồTự luyện tập: Playground Roblox