Menu
CoddyTech

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")) --> true

Thẻ 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ử.

challenge icon

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.

  1. Viết killOnTouch(hit): nếu hit.Parent (nhân vật đã chạm vào) có Humanoid, hãy đặt Health của nó thành 0.
  2. Viết setupStage(stage): với mỗi phần trong stage:GetDescendants() có gắn thẻ Kill, hãy kết nối sự kiện Touched của phần đó với killOnTouch.
  3. Trong buildTower, gọi setupStage(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