Lưu 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ể xác định khi một người chơi thu thập một xu, bài này của hướng dẫn cho bạn cách đếm số xu mà người chơi thu thập và làm cho số đó có thể nhìn thấy trên bảng xếp hạng.

Tạo một mô-đun script để ghi lại bộ sưu tập tiền xu

Để xử lý dữ liệu thu thập tiền của mỗi người chơi, bạn cần tạo một ModuleScript để chứa một cấu trúc dữ liệu và các chức năng truy cập vào dữ liệu thu thập tiền của mỗi người chơi. Các script modül

Để tạo một tập lệnh mô-đun:

  1. Trong cửa sổ Explorer , hover over ServerStorage và nhấp vào nút . Một menu ng上下文 hiển thị.

  2. Từ menu ng上 context, select ModuleScript . Một script module mới hiển thị dưới ServerStorage . Bạn đang đặt một script module vào ServerStorage vì bạn muốn quản lý log thu thập tiền tệ trên máy chủ.

    Studio's Explorer window with both the ServerScriptService's plus icon and ModuleScript object highlighted.
  3. Đổi tên script modul để PlayerData .

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


    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

    Script modül định nghĩa một bảng PlayerData chứa zero 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 script cần modül này sẽ nhận bản sao PlayerData tương tự, cho phép nhiều script để điều chỉnh v

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

    Script modul bắt đầu với một tuyên bố về một bảng trống, PlayerData , which is returned at the end of the script. It also contains các phương thức truy cập để lấy và đặt giá trị trong bảng.

    Bảng playerData có các bình luận mô tả cấu trúc của bảng, dễ dàng hơn cho người hiểu mã. Trong trường hợp này, một bảng playerData có một userId và một trường tên tương ứng là 1> Coins1> đại diện


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

    Định nghĩa một định dạng dữ liệu địa phương

    getData() là một hàm nội tại lấy dữ liệu cho một bảng dữ liệu playerData cụ thể. Nếu một người chưa thu thập một đồng xu, nó sẽ trả một bảng dữ liệu DEFAULT_PLAYER_DATA để đả


    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

    Định nghĩa người dùng công khai dữ liệu

    getValue() and updateValue() are public-facing functions that other scripts that require this module script can call. In our case, the CoinService uses these functions to update a người chơi's coin collection data whenever that player touches a coin.


    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

Thực hiện Bảng xếp hạng

Bạn có thể diễn tả dữ liệu thu thập tiền xu một cách thị giác với 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 tự động tạo ra bảng xếp hạng bằng một giao diện người dùng 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 script module lên 1> Bảng xếp hạng1>.

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


    local Leaderboard = {}
    -- Tạo một bảng xếp hạng mới
    local function setupLeaderboard(player)
    local leaderstats = Instance.new("Folder")
    -- 'leaderstats' là một cái tên được đặt tên cho Roblox khi tạo bảng xếp hạng
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    return leaderstats
    end
    -- Tạo 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 mục 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

    Hàm setupLeaderboard() tạo một tập tin mới có tên là leaderstats và đặt nó là con của người chơi đư


    -- Tạo một bảng xếp hạng mới
    local function setupLeaderboard(player)
    local leaderstats = Instance.new("Folder")
    -- 'leaderstats' là một cái tên được đặt tên cho Roblox khi tạo bảng xếp hạng
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    return leaderstats
    end
    -- Tạo 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à một trong những chức năng công khai trong module Bảng xếp hạng . Nó tạo ra giá trị stat cho một người chơi hoặc bảng xếp hạng nếu nó không tồn tại.

    FindFirstChild() lấy tên của một đối tượng và trả lại đối tượng nếu nó tồn tại, hoặc nil nếu nó không. Nó là một phương pháp phổ biến, an toàn để xác định có tồn tại hay không của một đối tượng trước khi bạ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 Script Módul

Với cả PlayerDataLeaderboard script scripts hoàn thành, yêu cầu chúng trong CoinService script để quản lý và hiển thị dữ liệu hồ sơ người chơi. Để cập nhật 1> CoinService1> :

  1. Trong Cửa sổ Explorer , mở script CoinService .

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


    -- Khởi tạo dịch vụ và biến
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local ServerStorage = game:GetService("ServerStorage")
    -- Các 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 xếp hạ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
    -- Định nghĩa hệ thống trao tặng 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 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
    -- Tùy chỉnh 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

    Những thay đổi đến script gốc CoinService bao gồm:

    • Nhập các PlayerDataLeaderboard module với chức năng require() .
    • Tuyên bố COIN_AMOUNT_TO_ADD như số lượng tiền xu mà người chơi thu thập một tiền xu khi người chơi thu thập một tiền xu, và COIN_KEY_NAME như tên mã định trong PlayerData .
    • Tạo chức năng giúp updatePlayerCoins() để cập nhật số lượng tiền xu của người chơi và thống kê bảng xếp hạng liên quan.
    • Thay thế câu chỉnh thay thế print() trong onCoinTouched() với một cuộc gọi đến updatePlayerCoins() .

Thử nghiệm

Đã đến lúc xem xét xem bộ sưu tập tiền xu đang hoạt động như ý muốn. Khi bạn chạm vào và thu thập một tiền xu trong trò chơi, bạn nên có thể xem số lượng tiền xu bạn đã thu thập trên UI bảng xếp hạng. Để kiểm tra trải nghiệm của bạn:

  1. Ở thanh menu, hãy nhấp vào nút Chơi . Studio bắt đầu chế độ thử nghiệm.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Di chuyển nhân vật của bạn để chạm vào một xu. Nếu các kịch bản của bạn hoạt động đúng cách, UI xếp hạng xu sẽ hiển thị và tăng số lượng xu của bạn khi bạn thu thập nhiều xu hơn.