Phá hủy các khối gạch
Bài học 5 trên 21 trong khóa học Trò chơi Roblox: Tháp bất tận của Coddy.
Mọi obby đều có các khối màu đỏ mà bạn không được chạm vào. Trong các màn chơi, chúng được đánh dấu bằng thẻ, một nhãn bạn có thể gán cho bất kỳ instance nào. Các dải màu đỏ mang thẻ Kill:
print(part:HasTag("Kill")) --> trueThẻ giúp các trò chơi lớn vẫn đơn giản: người tạo màn chơi chỉ cần gắn thẻ cho một khối, rồi một hàm sẽ khiến mọi khối được gắn thẻ hoạt động. Các màn chơi trong tòa tháp của bạn là những bản sao, vì vậy hãy thiết lập chúng sau khi tạo xong. GetDescendants liệt kê mọi khối bên trong một màn chơi, dù nằm sâu đến đâu:
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
endĐể kết thúc một mạng, hãy đặt Health của Humanoid thành 0. Bất cứ thứ gì cũng có thể gây ra va chạm, vì vậy trước tiên hãy kiểm tra xem hit.Parent, nhân vật đã chạm vào, có Humanoid hay không. Trong bài học này, mọi màn chơi đều là KillBricks, vì vậy bạn có thể thử.
Thử thách
DễBiến các dải màu đỏ thành chướng ngại vật gây chết người.
- Viết
killOnTouch(hit): nếuhit.Parent(nhân vật đã chạm vào) cóHumanoid, hãy đặtHealthcủa nó thành 0. - Viết
setupStage(stage): với mỗi phần trongstage:GetDescendants()có gắn thẻKill, hãy kết nối sự kiệnTouchedcủa phần đó vớikillOnTouch. - Trong
buildTower, gọisetupStage(stage)cho từng tầng bạn xếp chồng.
Nhấn Chơi rồi chạm vào một dải màu đỏ: bạn sẽ chết và hồi sinh. 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 stages = ServerStorage.Stages
local tower = nil
print("Each tower has " .. Settings.StageCount .. " stages")
-- 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ài học 5: thêm Kill Bricks vào đây
-- Chọn ngẫu nhiên một tầng bất kỳ
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- Đặt một bản sao của mô hình lên đỉnh tháp; trả về bản sao và độ cao đỉnh mới
local function stack(template, bottom)
local copy = template:Clone()
local box, size = copy:GetBoundingBox()
local lift = bottom - (box.Position.Y - size.Y / 2)
copy:PivotTo(copy:GetPivot() + Vector3.new(0, lift, 0))
copy.Parent = tower
return copy, bottom + size.Y
end
-- Tạo tháp mới với các tầng ngẫu nhiên, từ dưới lên
local function buildTower()
tower = Instance.new("Model")
tower.Name = "Tower"
tower.Parent = workspace
local top = 0
for i = 1, Settings.StageCount do
local stage, newTop = stack(pickStage(), top)
top = newTop
end
stack(ServerStorage.Finish, top)
end
buildTower()
Tất cả bài học trong Trò chơi Roblox: Tháp bất tận
Tự luyện tập: Playground Roblox