Hướng dẫn trung cấp

Tính điểm

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Trong các hướng dẫn trước, bạn đã tạo ra một loạt tính năng trải nghiệm bao gồm nền tảng mờ dầnmagma chết người. Hướng dẫn này kết hợp những điều này thành một trải nghiệm có thể chơi được, nơi người dùng xem ai có thể sống lâu nhất. Mỗi giây họ còn sống, một điểm sẽ được thêm vào điểm số của họ.

Thiết lập

Đầu tiên, bạn sẽ cần thiết lập cảnh cho trải nghiệm của mình. Nhân bản nền tảng mờ dần bạn đã tạo trong hướng dẫn trước và cho phép người dùng thi đua để đứng trên bảng nền tảng lâu nhất có thể.

Bạn cũng có thể sử dụng magma chết người để giết người dùng khi họ ngã xuống nền tảng, hoặc chỉ để họ rơi xuống tử vong. Hãy chắc chắn rằng bạn đặt một SpawnLocation ở đâu đó nơi người dùng có thể nhảy lên nền tảng để bắt đầu chơi.

Điểm Spawn trên một lưới nền tảng mờ dần, trên một sàn magma

Điểm của người chơi

Roblox có một Bảng xếp hạng tích hợp để hiển thị thống kê của người dùng. Khi bạn thiết lập điểm cho người chơi thông qua bảng xếp hạng, chúng sẽ xuất hiện ở bên phải màn hình trong trải nghiệm.

Bảng xếp hạng với tên người dùng và điểm số được hiển thị

Bạn sẽ học những cách tùy chỉnh hơn để hiển thị thông tin trong các hướng dẫn sau, nhưng bảng xếp hạng là cách đơn giản nhất để tạo ra một hệ thống tính điểm có thể nhìn thấy trong Roblox.

Tốt nhất là nên đặt các script thiết lập trạng thái trải nghiệm vào ServerScriptService vì chúng sẽ tự động chạy khi trải nghiệm bắt đầu. Trong ServerScriptService, tạo một script có tên SetupPoints.

Script SetupPoints đã được thiết lập trong ServerScriptService trong cửa sổ Explorer

Nghe người chơi

Trong Roblox, một dịch vụ là một đối tượng thực hiện một loạt các chức năng hữu ích. Dịch vụ Players có một sự kiện gọi là PlayerAdded mà bạn có thể sử dụng để thiết lập điểm cho mỗi người dùng gia nhập trải nghiệm.

Bạn có thể truy cập các dịch vụ bằng hàm GetService trong đối tượng game. game là một biến có thể truy cập từ mọi nơi và chứa mọi thứ trong trải nghiệm của bạn.

  1. Tạo một biến cho dịch vụ Players sử dụng game:GetService("Players").

  2. Tạo một hàm gọi là onPlayerAdded với một tham số cho người chơi đến.

  3. Kết nối hàm onPlayerAdded với sự kiện PlayerAdded.


    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Tạo một thư mục thống kê

Để điểm của người dùng hiển thị trong bảng xếp hạng, tất cả những gì bạn cần làm là tạo một Folder mới trong đối tượng Player của họ có tên là "leaderstats" và đặt điểm của họ vào đó. Các đối tượng mới có thể được tạo từ trong một script thông qua hàm Instance.new().

  1. Tạo một đối tượng Folder mới bằng Instance.new("Folder"), lưu kết quả vào một biến mới gọi là leaderstats.


    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. Đặt thuộc tính Name của leaderstats thành "leaderstats".

  3. Gán leaderstats cho player.


    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Tạo các điểm

Hệ thống bảng xếp hạng đọc bất kỳ giá trị nào trong thư mục leaderstats và hiển thị bất kỳ thứ gì mà nó tìm thấy.

Để thêm một thống kê sẽ theo dõi điểm của người chơi, một đối tượng IntValue mới có thể được gán cho thư mục leaderstats. Tên của đối tượng giá trị sẽ được hiển thị cùng với giá trị hiện tại của nó.

  1. Sử dụng một biến có tên points để tạo một đối tượng IntValue mới bằng Instance.new().
  2. Đặt Name thành "Points".
  3. Đặt Value thành 0; đây là những gì bảng xếp hạng sẽ hiển thị ban đầu cho người chơi.
  4. Gán đối tượng points cho thư mục leaderstats.

local Players = game:GetService("Players")
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
end
Players.PlayerAdded:Connect(onPlayerAdded)

Hãy thử trải nghiệm của bạn và bạn nên thấy bảng xếp hạng xuất hiện ở góc trên bên phải với tên của người dùng và điểm số bên cạnh họ.

Đếm thời gian

Mỗi người dùng nên kiếm được một điểm cho mỗi giây họ còn sống. Một vòng lặp while và hàm task.wait() có thể được sử dụng để cập nhật giá trị điểm mỗi giây.

  1. Ở cuối script, tạo một vòng lặp while với true là điều kiện.
  2. Trong vòng lặp, task.wait() trong 1 giây.

Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
end

Danh sách người chơi

Để chạy mã cho từng người dùng trong trải nghiệm, bạn cần lặp qua mảng người dùng được trả về bởi hàm GetPlayers.

Một mảng là một danh sách các mục được lưu trữ theo thứ tự. Mỗi mục có thể được truy cập bằng vị trí chỉ mục của nó, bắt đầu từ 1. Bạn có thể lấy độ dài của một mảng bằng cách thêm # ở trước.

  1. Lưu kết quả của Players:GetPlayers() vào biến playerList.
  2. Tạo một vòng lặp for với giá trị bắt đầu là 1 và giá trị kết thúc là #playerList, để bạn có một lần lặp cho mỗi người chơi.

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- Thêm logic của bạn ở đây cho mỗi người chơi trong playerList
end
end

Trao điểm

Để trao một điểm cho mỗi người dùng trong vòng lặp for, bạn sẽ cần lấy người dùng ra khỏi mảng và cộng 1 vào đối tượng Points được lưu trong thư mục leaderstats của họ.

Các đối tượng được lưu trong một mảng được truy cập bằng cách sử dụng dấu ngoặc vuông - ví dụ, mục đầu tiên trong mảng playerList có thể được truy cập bằng playerList[1]. Nếu bạn viết playerList[currentPlayer] trong vòng lặp for, bạn có thể di chuyển qua mỗi người dùng trong danh sách với mỗi lần lặp của vòng lặp.

  1. Lưu người dùng tại playerList[currentPlayer] vào một biến có tên player.
  2. Lưu đối tượng Points của người dùng vào một biến có tên points.
  3. Đặt thuộc tính Value của points thành points.Value + 1.

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
local points = player.leaderstats.Points
points.Value += 1
end
end

Thử nghiệm của bạn và bạn nên thấy rằng bảng xếp hạng cho điểm số của người chơi đếm lên mỗi giây một lần.

Nghe nhân vật

Mục tiêu của trải nghiệm là xem ai có thể sống lâu nhất, vì vậy người dùng nào chết sẽ cần phải có điểm số của họ được đặt lại về 0.

Bạn sẽ cần lấy mô hình Character cho người dùng để phát hiện khi nào họ đã chết. Mô hình này chỉ được thêm vào trải nghiệm sau khi đối tượng Player đã được tải và bạn có thể sử dụng sự kiện CharacterAdded để lắng nghe khi nhân vật sẵn sàng sử dụng. Tạo một hàm có tên là onCharacterAdded với hai tham số: một cho nhân vật, một cho người chơi.


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")

Mặc dù bạn đã bao gồm người dùng trong tham số của hàm onCharacterAdded, sự kiện thực tế CharacterAdded chỉ trả về nhân vật, không phải người dùng liên kết. Để truyền đối tượng player theo cách khác, hãy sử dụng một hàm vô danh cho kết nối sự kiện.


local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Đặt lại điểm

Khi một người dùng chết, Humanoid sẽ tự động kích hoạt một sự kiện Died. Bạn có thể sử dụng sự kiện này để tìm ra khi nào cần đặt lại điểm của họ.

Humanoid được tìm thấy bên trong mô hình Character, nhưng nội dung của mô hình này chỉ được lắp ráp khi người dùng xuất hiện. Để mã của bạn có thể an toàn chờ đợi đối tượng Humanoid được tải, hãy sử dụng hàm WaitForChild(). Bạn có thể gọi nó trên bất kỳ đối tượng cha nào, truyền vào tên chuỗi của đứa trẻ mà bạn đang chờ. Tạo một biến để chờ đợi Humanoid sử dụng character:WaitForChild("Humanoid").


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
end

Hàm bạn cần kết nối với sự kiện Died rất ngắn và chỉ bao giờ cần dùng ở đây, vì vậy bạn có thể lại sử dụng một hàm vô danh.

  1. Kết nối một hàm vô danh mới với sự kiện Died của Humanoid.
  2. Trong hàm vô danh, tạo một biến gọi là points cho đối tượng Points của người chơi.
  3. Đặt thuộc tính Value của points thành 0.

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
end)
end

Hãy thử điều này và bạn sẽ thấy điểm số của người dùng được đặt lại khi họ chết.

Kiểm tra người chơi

Nếu người dùng tiếp tục kiếm điểm ngay cả khi đã chết, điều này không phù hợp với tinh thần của trải nghiệm, vì vậy mã cần phải kiểm tra xem người dùng còn sống hay không trước khi trao một điểm.

Bạn cần bắt đầu bằng cách xác định một thuộc tính trong hàm onPlayerAdded mà có thể được sử dụng để kiểm tra xem người dùng có còn sống hay không. Lúc này, người dùng vẫn chưa còn sống và đã xuất hiện, vì mô hình nhân vật của họ vẫn cần được thêm vào.

Các thuộc tính cho phép bạn tùy chỉnh các đối tượng trong Roblox với dữ liệu của riêng bạn. Một thuộc tính bao gồm một tên và một giá trị. Bạn có thể tạo một cái trên bất kỳ đối tượng nào bằng cách sử dụng hàm SetAttribute. Gọi SetAttribute trên player để tạo một thuộc tính mới có tên là "IsAlive" với giá trị false.


local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Khi mô hình nhân vật của người dùng xuất hiện lại, giá trị của IsAlive cần được thay đổi thành true để người dùng có thể bắt đầu kiếm điểm một lần nữa.

  1. Trong onCharacterAdded, đặt thuộc tính IsAlive của player thành true.
  2. Trong onCharacterDied, đặt thuộc tính IsAlive của player thành false.

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end

Cuối cùng, IsAlive nên được kiểm tra trước khi bất kỳ điểm nào được trao trong vòng lặp while ở cuối script. Hàm GetAttribute nhận tên của một thuộc tính và trả về giá trị của nó. Trong vòng lặp while, bọc mã để trao điểm trong một câu lệnh if với điều kiện player:GetAttribute("IsAlive").


while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end

Thử nghiệm trải nghiệm của bạn bây giờ và bạn sẽ thấy người dùng kiếm điểm mỗi giây họ còn sống, và giữ ở mức 0 khi không còn sống. Hãy mời bạn bè chơi với bạn và xem ai có thể đạt được điểm số cao nhất.

Đây chỉ là khởi đầu: bạn có thể tiếp tục cải thiện trải nghiệm của mình cho người dùng. Dưới đây là một số mẹo:

  • Đặt mã cho tất cả các nền tảng vào một script duy nhất, khiến việc cập nhật dễ dàng hơn nhiều.
  • Tạo một khu vực chờ nơi người dùng đợi để được dịch chuyển đến khu vực trải nghiệm, cho phép người dùng bắt đầu cùng lúc.
  • Thông báo những người chiến thắng của mỗi vòng.

Mã hoàn chỉnh


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for i = 1, #playerList do
local player = playerList[i]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.