Menu
CoddyTech

Tách một chồng xu

Bài học 3 trên 20 trong khóa học Trò chơi Roblox: mô phỏng thú cưng của Coddy.

Người chơi phá các đống bằng cách nhấp vào chúng. ClickDetector bên trong một bộ phận sẽ kích hoạt MouseClick trên máy chủ, kèm theo người chơi đã nhấp, khi họ đến đủ gần.

Mỗi lần nhấp sẽ giảm Health của đống đi 1. Khi giá trị này chạm 0, đống sẽ vỡ: người chơi nhận được số xu bằng Value của đống, rồi đống bị phá hủy.

local health = pile:GetAttribute("Health") - 1
if health > 0 then
	pile:SetAttribute("Health", health)
	return
end
-- đã vỡ

Sự kiện nhấp được kết nối bên trong spawnPile và gọi hitPile, được viết bên dưới spawnPile. Một hàm chỉ có thể dùng tên cục bộ đã được khai báo, vì vậy trước tiên hãy khai báo local hitPile ở phía trên cả hai, rồi viết phần thân hàm sau bằng function hitPile(player, pile).

challenge icon

Thử thách

Dễ

Phá một đống bằng cách nhấp vào nó.

  1. Phía trên spawnPile, khai báo local hitPile.
  2. Trong spawnPile, thêm một ClickDetector vào đống; MouseClick của nó gọi hitPile(player, pile).
  3. Bên dưới, viết function hitPile(player, pile): giảm Health đi 1; nếu lớn hơn 0, lưu giá trị đó rồi dừng; nếu không, cộng Value của đống vào Coins rồi phá hủy đống.

Nhấn Chơi rồi nhấp vào một đống ba lần: đống đó vỡ và Coins tăng thêm 5. 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 piles = workspace.Piles

print("A Meadow pile gives " .. Settings.PileValue .. " coins")

-- Mỗi người chơi có Coins 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 coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Parent = leaderstats
end)

-- Đống xu tại một vị trí: bản sao của ServerStorage.CoinPile với lượng máu
-- và giá trị được lưu dưới dạng thuộc tính
local function spawnPile(spot)
	local pile = ServerStorage.CoinPile:Clone()
	pile.Position = spot.Position
	pile:SetAttribute("MaxHealth", Settings.PileHealth)
	pile:SetAttribute("Health", Settings.PileHealth)
	pile:SetAttribute("Value", Settings.PileValue)
	pile.Parent = piles
	return pile
end

-- Bài học 3: Phá đống xu nằm ở đây

-- Mỗi vị trí trong Meadow có một đống xu
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end

Tất cả bài học trong Trò chơi Roblox: mô phỏng thú cưng

Tự luyện tập: Playground Roblox