Ghi lại và hiển thị dữ liệu người chơi

*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.


Bây giờ bạn có thể phát hiện khi một người chơi đã thu thập được một đồng xu, phần này của hướng dẫn dạy bạn cách đếm bao nhiêu đồng xu mà người chơi đã thu thập, và làm cho số tiền đó trở nên hiển thị trên bảng xếp hạng.

Tạo một kịch bản module để ghi lại việc thu thập tiền bộ sưu tập

Để quản lý và lưu trữ dữ liệu sưu tầm tiền của mỗi người chơi, bạn cần tạo một đối tượng ModuleScript để chứa một cấu trúc dữ liệu và chức năng truy cập dữ liệu sưu tầm tiền cho mỗi người chơi.Các kịch bản mô-đun là mã có thể tái sử dụng mà các kịch bản khác có thể yêu cầu.Trong trường hợp này, CoinService yêu cầu kịch bản module này để có thể cập nhật dữ liệu thu thập tiền xu khi người chơi chạm vào tiền xu.

Để tạo một kịch bản module:

  1. Trong cửa sổ Explorer , di chuột qua ServerStorage và nhấp vào nút . Một menu ngữ cảnh hiển thị.

  2. Từ menu ngữ cảnh, hãy chọn ModuleScript .Một kịch bản module mới hiển thị dưới ServerStorage .Bạn đang đặt một kịch bản module vào ServerStorage vì bạn muốn quản lý logic thu thập tiền xu trên máy chủ.

    Studio's Explorer window with both the ServerScriptService's plus icon and ModuleScript object highlighted.
  3. Đổi tên kịch bản mô-đun thành PlayerData .

    Studio's Explorer window with the PlayerData script highlighted under ServerStorage.
  4. Thay thế mã mặc định bằng mã sau:


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    local playerData = {
    --[[
    [userId: string] = {
    ["Coins"] = coinAmount: number
    }
    ]]
    }
    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end
    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end
    return PlayerData

    Tập lệnh mô-đun định nghĩa một bảng PlayerData chứa không có hoặc nhiều bảng playerData , đại diện cho dữ liệu thu thập tiền xu cho một người chơi.Mọi kịch bản yêu cầu kịch bản module này nhận được bản sao giống nhau của bảng PlayerData, cho phép nhiều kịch bản thay đổi và chia sẻ dữ liệu thu thập tiền xu.

    Tuyên bố cấu trúc dữ liệu

    Tập lệnh mô-đun bắt đầu với tuyên bố về một bảng trống, PlayerData , được trả lại vào cuối tập lệnh.Nó cũng bao gồm các phương pháp truy cập để lấy và đặt giá trị trong bảng.

    Bảng playerData bao gồm các bình luận mô tả cấu trúc của bảng, làm cho mã dễ hiểu hơn.Trong trường hợp này, một bảng playerData bao gồm một userId và một trường tương ứng có tên là Coins đại diện cho số tiền xu được thu thập cho người chơi đó.


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    local playerData = {
    --[[
    [userId: string] = {
    ["Coins"] = coinAmount: number
    }
    ]]
    }
    ...
    return PlayerData

    Xác định một truy cập dữ liệu địa phương

    getData() là một chức năng địa phương truy xuất dữ liệu cho một bảng cụ thể playerData .Nếu một người chơi chưa thu thập được một đồng tiền, nó trả về một bảng DEFAULT_PLAYER_DATA để đảm bảo rằng mỗi người chơi có một số dữ liệu liên quan đến họ.Một công ước phổ biến là tạo các chức năng đơn giản, hướng công cộng mà chuyển giao logic sang các chức năng có phạm vi địa phương thực hiện nâng hạ nặng.


    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end

    Xác định truy cập dữ liệu công cộng

    getValue()updateValue() là chức năng công cộng mà các kịch bản khác cần kịch bản module này có thể gọi.Trong trường hợp của chúng tôi, CoinService sử dụng các chức năng này để cập nhật dữ liệu bộ sưu tập tiền xu của người chơi mỗi khi người chơi chạm vào một đồng xu.


    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end

Triển khai bảng xếp hạng

Bạn có thể đại diện dữ liệu thu thập tiền xu bằng cách hiển thị bảng xếp hạng trên màn hình.Roblox bao gồm một hệ thống tích hợp sẵn tự động tạo bảng xếp hạng bằng cách sử dụng UI mặc định.

Để tạo bảng xếp hạng:

  1. Trong cửa sổ Explorer , tạo một ModuleScript trong ServerStorage , sau đó đổi tên kịch bản module thành Bảng xếp hạng .

    Studio's Explorer window with the Leaderboard script highlighted under ServerStorage.
  2. Thay thế mã mặc định bằng mã sau:


    local Leaderboard = {}
    -- Tạo một bảng xếp hạng mới
    local function setupLeaderboard(player)
    local leaderstats = Instance.new("Folder")
    -- Tên 'leaderstats' là một tên được dự trữ Roblox công nhận để tạo bảng xếp hạng
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    return leaderstats
    end
    -- Tạo một giá trị chỉ số bảng xếp hạng mới
    local function setupStat(leaderstats, statName)
    local stat = Instance.new("IntValue")
    stat.Name = statName
    stat.Value = 0
    stat.Parent = leaderstats
    return stat
    end
    -- Cập nhật giá trị chỉ số của một người chơi
    function Leaderboard.setStat(player, statName, value)
    local leaderstats = player:FindFirstChild("leaderstats")
    if not leaderstats then
    leaderstats = setupLeaderboard(player)
    end
    local stat = leaderstats:FindFirstChild(statName)
    if not stat then
    stat = setupStat(leaderstats, statName)
    end
    stat.Value = value
    end
    return Leaderboard

    Các phần tiếp theo mô tả cách bảng xếp hạng hoạt động chi tiết hơn.

    Tạo bảng xếp hạng

    Chức năng setupLeaderboard() tạo một ví dụ thư mục mới có tên là leaderstats và đặt nó là con của người chơi được chỉ định.Roblox tự động nhận ra một thư mục có tên leaderstats như một container của chỉ số và tạo một thành phần UI để hiển thị chỉ số.Nó yêu cầu các giá trị trong leaderstats được lưu trữ như đối tượng "giá trị" (như StringValue , IntValue hoặc NumberValue ).


    -- Tạo một bảng xếp hạng mới
    local function setupLeaderboard(player)
    local leaderstats = Instance.new("Folder")
    -- Tên 'leaderstats' là một tên được dự trữ Roblox công nhận để tạo bảng xếp hạng
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    return leaderstats
    end
    -- Tạo một giá trị chỉ số bảng xếp hạng mới
    local function setupStat(leaderstats, statName)
    local stat = Instance.new("IntValue")
    stat.Name = statName
    stat.Value = 0
    stat.Parent = leaderstats
    return stat
    end

    Cập nhật chỉ số người chơi

    setStat() là chức năng công cộng duy nhất trong mô-đun Bảng xếp hạng .Nó tạo giá trị chỉ số cho một người chơi hoặc bảng xếp hạng cụ thể nếu nó chưa tồn tại.

    FindFirstChild() lấy tên của một đối tượng và trả về đối tượng nếu nó tồn tại, hoặc nil nếu nó không tồn tại.Đó là một phương pháp phổ biến và an toàn để xác định xem một đối tượng có tồn tại trước khi bạn sử dụng nó.


    -- Cập nhật giá trị chỉ số của một người chơi
    function Leaderboard.setStat(player, statName, value)
    local leaderstats = player:FindFirstChild("leaderstats")
    if not leaderstats then
    leaderstats = setupLeaderboard(player)
    end
    local stat = leaderstats:FindFirstChild(statName)
    if not stat then
    stat = setupStat(leaderstats, statName)
    end
    stat.Value = value
    end

Tích hợp các kịch bản module

Với cả hai mô-đun Dữ liệu người chơiBảng xếp hạng hoàn thành, yêu cầu chúng trong mô-đun CoinService để quản lý và hiển thị dữ liệu tiền xu người chơi.Để cập nhật CoinService :

  1. Trong cửa sổ Explorer , mở kịch bản CoinService .

  2. Thay thế mã hiện tại bằng mã sau:


    -- Khởi tạo các dịch vụ và biến số
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local ServerStorage = game:GetService("ServerStorage")
    -- Mô-đun
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
    local COOLDOWN = 10
    local COIN_AMOUNT_TO_ADD = 1
    local function updatePlayerCoins(player, updateFunction)
    -- Cập nhật bảng tiền xu
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, updateFunction)
    -- Cập nhật bảng xếp hạng tiền xu
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    end
    -- Xác định người xử lý sự kiện
    local function onCoinTouched(otherPart, coin)
    if coin:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Người chơi chạm vào một đồng xu
    coin.Transparency = 1
    coin:SetAttribute("Enabled", false)
    updatePlayerCoins(player, function(oldCoinAmount)
    oldCoinAmount = oldCoinAmount or 0
    return oldCoinAmount + COIN_AMOUNT_TO_ADD
    end)
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Thiết lập người lắng nghe sự kiện
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Các thay đổi đối với kịch bản ban đầu CoinService bao gồm:

    • Nhập các mô-đun Dữ liệu người chơiBảng xếp hạng bằng chức năng require().
    • Tuyên bố COIN_AMOUNT_TO_ADD là số tiền xu cần thêm khi một người chơi thu thập một tiền xu, và COIN_KEY_NAME là tên chìa khóa được định nghĩa trong PlayerData .
    • Tạo chức năng trợ giúp updatePlayerCoins() để cập nhật số tiền xu của người chơi và chỉ số bảng xếp hạng liên quan.
    • Thay thế tuyên bố placeholder bằng một cuộc gọi đến .

Thử nghiệm

Đã đến lúc xem xem bộ sưu tập tiền xu hoạt động như dự định.Khi bạn chạm và thu thập một đồng tiền trong trò chơi, bạn nên có thể nhìn thấy số tiền xu bạn đã thu thập trên UI bảng xếp hạng.Để thử nghiệm trải nghiệm của bạn:

  1. Trong thanh công cụ, nhấp vào nút Chơi . Studio bước vào chế độ thử nghiệm.

    Play button highlighted in Studio's playtesting options.
  2. Di chuyển nhân vật của bạn để chạm vào một đồng xu.Nếu các kịch bản của bạn hoạt động đúng cách, giao diện người dùng bảng xếp hạng hiển thị và tăng số tiền xu của bạn khi bạn thu thập thêm tiền xu.