Tấm biển
Bài học 7 trên 22 trong khóa học Game Roblox: nhà máy tycoon của Coddy.
Biển hiệu phía trên nhà máy cho biết nhà máy thuộc về ai. Chữ trên mặt của một bộ phận là một SurfaceGui bên trong bộ phận đó, chứa một TextLabel. Đặt tên cho các nhãn giúp bạn dễ tìm lại, còn một hàm nhỏ gom mọi thay đổi đối với biển hiệu vào một chỗ:
local gui = Instance.new("SurfaceGui")
gui.Parent = tycoon.Sign
local signLabel = Instance.new("TextLabel")
signLabel.Name = "Status"
signLabel.Size = UDim2.fromScale(1, 1)
signLabel.TextScaled = true
signLabel.Text = "Opening soon"
signLabel.Parent = guiUDim2.fromScale(1, 1) giúp nhãn phủ kín toàn bộ mặt, còn TextScaled điều chỉnh kích thước chữ cho vừa với mặt đó.
Thử thách
Trung bìnhĐặt một biển báo phía trên nhà máy để cho biết nhà máy thuộc về ai.
- Trong
tycoon.Sign, thêm một SurfaceGui chứa TextLabel có tênStatusvà chiếm toàn bộ khung, với văn bản được phóng to có nội dungStep on the green pad to claim this factory. - Viết
setSign(text)để đặt Text của nhãn đó. - Khi có người nhận nhà máy, gọi
setSign(player.Name .. "'s Factory").
Nhấn Chơi rồi bước lên ô màu xanh lá: biển báo sẽ hiển thị tên bạn. Sau đó nhấn Kiểm tra.
Tự làm thử
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local Debris = game:GetService("Debris")
local Settings = require(game.ReplicatedStorage.Settings)
local tycoon = workspace.Tycoon
local owner = nil
print("Ore is worth " .. Settings.OreValue .. " Cash")
-- Mỗi người chơi có Cash 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 cash = Instance.new("IntValue")
cash.Name = "Cash"
cash.Parent = leaderstats
end)
-- Bài học 7: Đặt Sign ở đây
-- Ore: một khối nhỏ có giá trị Cash, rơi từ dropper xuống
local function dropOre(dropper)
local ore = Instance.new("Part")
ore.Name = "Ore"
ore.Size = Vector3.new(1, 1, 1)
ore.Color = Color3.fromRGB(150, 150, 160)
ore.Position = dropper.Position - Vector3.new(0, 2.5, 0)
ore:SetAttribute("Value", Settings.OreValue)
if math.random() < Settings.GoldChance then
ore.Color = Color3.fromRGB(255, 200, 40)
ore.Material = Enum.Material.Neon
ore:SetAttribute("Value", Settings.OreValue * 5)
end
ore.Parent = workspace
Debris:AddItem(ore, 20)
end
local function startDropper(dropper)
task.spawn(function()
while dropper:IsDescendantOf(workspace) do
dropOre(dropper)
task.wait(Settings.DropInterval)
end
end)
end
-- Băng chuyền vận chuyển mọi thứ nằm trên đó
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)
-- Bộ thu gom biến Ore thành Cash
tycoon.Collector.Touched:Connect(function(hit)
if hit.Name == "Ore" then
local value = hit:GetAttribute("Value")
hit:Destroy()
if owner then
owner.leaderstats.Cash.Value += value
end
end
end)
-- Nhận quyền sở hữu: người chơi đầu tiên bước lên bệ sẽ sở hữu nhà máy
local claimPad = tycoon.ClaimPad
claimPad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not owner then
owner = player
claimPad.Color = Color3.fromRGB(120, 120, 120)
claimPad.Material = Enum.Material.SmoothPlastic
for _, dropper in CollectionService:GetTagged("Dropper") do
if dropper:IsDescendantOf(workspace) then
startDropper(dropper)
end
end
end
end)
Tất cả bài học trong Game Roblox: nhà máy tycoon
Tự luyện tập: Playground Roblox