Điểm Đánh Giá

*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 các tính năng kinh nghiệm bao gồm các平台 mờ dầndịch lava độc hại . This tutorial kết hợp các tính năng này thành một trải nghiệm có thể chơi ở đó người dùng thấy ai có thể sống s

Cài đặt

Đầu tiên, bạn sẽ cần phải cài đặt cảnh cho trải nghiệm của bạn. Duplicate the fading platforms bạn đã tạo trong hướng dẫn trước và cho phép người dùng cạnh tranh để ở lại bảng của các nền tảng lâu nhất có thể.

Bạn cũng có thể sử dụng lava độc ác để giết người dùng khi họ rơi khỏi các nền tảng, hoặc chỉ để chúng rơi vào cảnh tàn tật của họ. Đảm bảo bạn đặt một SpawnLocation ở đâu đó mà người dùng có thể nhảy vào các nền tảng để bắt đầ

Điểm người chơi

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

Leaderboard with username and points shown

Bạn sẽ học thêm cách tùy chỉnh 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 đánh giá có thể nhìn thấy trong Roblox.

Tốt nhất là đặt các script thiết lập trạng thái kinh 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 tên là SetupPoints .

SetupPoints script in place in ServerScriptService in the Explorer window

Lắng nghe cho 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 tên là PlayerAdded mà bạn có thể sử dụng để cài đặt điểm cho mỗi người tham gia trải

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

  1. Tạo một biến cho dịch vụ Người chơi bằng cách sử dụng game:GetService("Players") .

  2. Tạo một chức năng tên là onPlayerAdded với một biến để người chơi đang đến.

  3. Kết nối hàm onPlayerAdded vào 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 Chỉ số

Để làm cho điểm của người dùng hiển thị trên 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

  1. Tạo một đối tượng mới Folder bằng cách sử dụng Instance.new("Folder") , lưu kết quả trong một biến mới có tên là leaderstats .


    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. Đặt tên thuộc tính của leaderstats để "leaderstats" .

  3. Parent leaderstats đến 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 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ì nó tìm thấy.

Để thêm một biến nhất định sẽ theo dõi điểm của một người chơi, một đối tượng mới IntValue có thể được gắn vào thư mục leaderstats. Tên của đối tượng giá trị sẽ được hiển thị bên cạnh giá trị hiện tại của nó.

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

Thử nghiệm 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 ở phía trên cùng bên phải với tên người dùng của bạn và một điểm số đi kèm.

Đế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ọ sống. Một while vòng và task.wait() chức năng có thể được sử dụng để cập nhật giá trị của các điểm mỗi giây.

  1. Ở cuối script, tạo một while lặp với true như điều kiện.
  2. Trong vòng lặp, task.wait() cho 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 mọi người trong trải nghiệm, bạn cần phải lặp qua <a href="/reference/engine/databases">mảng</a> của người dùng được trả lại bởi hàm <a href="/reference/engine/databases">Class.Players:GetPlayers()|GetPlayers</a>.

Một mat阵 là một danh sách các mục được lưu trong theo thứ tự. Mỗi mục có thể được truy cập bởi vị trí 索引 của nó, bắt đầu từ 1 . Bạn có thể nhận được chiều dài của một mat阵 bằng cách kết hợp nó với # .

  1. Lưu kết quả của Players:GetPlayers() trong một biến playerList .
  2. Tạo một for vòng với giá trị khởi đầu là 1 và giá trị cuối cùng là #playerList , so that you get one iteration of the vòng per 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

Điều kiện để nhận

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

Các đối tượng lưu trong một bảng được truy cập bằng cách sử dụng dấu chéo vuông - ví ví dụ / trường hợp, món đồ đầu tiên trong bảng playerList có thể được truy cập bằng cách sử dụng playerList[1] . Nếu b

  1. Lưu người dùng ở playerList[currentPlayer] trong một biến đổi tên là player .
  2. Lưu đối tượng Điểm của người dùng trong biến points .
  3. Đặt độ Value độ points đến 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 trải nghiệm của bạn và bạn nên thấy rằng bảng xếp hạng hiển thị số điểm của người chơi của bạn tăng lên bởi 1 mỗi giây.

Lắng nghe nhân vật

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

Bạn sẽ cần nhận mô hình Nhân vật cho người dùng để xác định khi họ đã chết. Mô hình này chỉ được thêm vào trải nghiệm sau k


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 các thông số của chức năng onCharacterAdded, thực tế sự kiện CharacterAdded chỉ trả lại nhân vật, không phải người dùng được liên kết. Để truyền đối tượng người chơi


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

Điểm thiết lập

Khi một người chết, họ sẽ tự động Humanoid một sự kiện Died. Bạn có thể sử dụng sự kiện này để xác định khi nào để thiết lập lại điểm của họ.

Hình người được tìm thấy bên trong mô hình Nhân vật, nhưng nội dung của mô hình đó chỉ được tập hợp khi người dùng tạo ra. Để làm cho mã của bạn an toàn chờ đợi đối t


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

Hành động bạn cần phải kết nối với sự kiện Died rất ngắn và sẽ chỉ bao gồm ở đây, vì vậy bạn có thể sử dụng một hành động anonim một lần nữa.

  1. Kết nối một chức năng mới cho ẩn Died trên Humanoid.
  2. Trong hàm chức anonim, tạo một biến đổi tên là points cho đối tượng Điểm của người chơi.
  3. Đặt Value tính chất của points đến 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

Thử 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 vẫn kiếm được điểm ngay cả khi chết, nó thực sự không đến trong tâm hồn của trải nghiệm, vì vậy mã cần kiểm tra xem người dùng có sống hay không trước khi đưa ra một điểm.

Bạn cần phải bắt đầu bằng cách định nghĩa một thuộc tính trong onPlayerAdded hành động mà có thể được sử dụng để kiểm tra có phải người dùng đang sống không. Tại thời điểm này, người dùng vẫn chưa sống và đã gọi xe, vì họ v�

Các thuộc tính cho phép bạn tùy chỉnh các thể đố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 tên và giá trị. Bạn có thể tạ


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 được tái sinh, 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ới.

  1. Trong onCharacterAdded, đặt IsAlive đặc tính của player đến 1> true1> .
  2. Trong onCharacterDied, đặt IsAlive đặc tính của player đến 1> false1> .

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 cấp trong chuỗi while tại cuố


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 ngay bây giờ và bạn nên tìm thấy người dùng kiếm điểm mỗi giây khi họ đang sống, và ở lại 0 khi họ không sống. Khi bạn có bạn bè chơi với bạn và xem ai có thể có điểm cao nhất.

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

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

Mã cuối cùng


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