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:
Trong cửa sổ Explorer , hover over ServerStorage và nhấp vào nút ⊕ . Một menu ng上下文 hiển thị.
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ủ.
Đổi tên script modul để PlayerData .
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_DATAplayerData[tostring(player.UserId)] = datareturn dataendfunction PlayerData.getValue(player, key)return getData(player)[key]endfunction PlayerData.updateValue(player, key, updateFunction)local data = getData(player)local oldValue = data[key]local newValue = updateFunction(oldValue)data[key] = newValuereturn newValueendreturn PlayerDataGiải thích mã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_DATAplayerData[tostring(player.UserId)] = datareturn dataendĐị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]endfunction PlayerData.updateValue(player, key, updateFunction)local data = getData(player)local oldValue = data[key]local newValue = updateFunction(oldValue)data[key] = newValuereturn newValueend
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:
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>.
Thay thế mã mặc định bằng mã sau đây:
local Leaderboard = {}-- Tạo một bảng xếp hạng mớilocal 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ạngleaderstats.Name = "leaderstats"leaderstats.Parent = playerreturn leaderstatsend-- Tạo giá trị chỉ số bảng xếp hạng mớilocal function setupStat(leaderstats, statName)local stat = Instance.new("IntValue")stat.Name = statNamestat.Value = 0stat.Parent = leaderstatsreturn statend-- Cập nhật giá trị chỉ số của một người chơifunction Leaderboard.setStat(player, statName, value)local leaderstats = player:FindFirstChild("leaderstats")if not leaderstats thenleaderstats = setupLeaderboard(player)endlocal stat = leaderstats:FindFirstChild(statName)if not stat thenstat = setupStat(leaderstats, statName)endstat.Value = valueendreturn LeaderboardGiải thích mã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ớilocal 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ạngleaderstats.Name = "leaderstats"leaderstats.Parent = playerreturn leaderstatsend-- Tạo giá trị chỉ số bảng xếp hạng mớilocal function setupStat(leaderstats, statName)local stat = Instance.new("IntValue")stat.Name = statNamestat.Value = 0stat.Parent = leaderstatsreturn statendCậ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ơifunction Leaderboard.setStat(player, statName, value)local leaderstats = player:FindFirstChild("leaderstats")if not leaderstats thenleaderstats = setupLeaderboard(player)endlocal stat = leaderstats:FindFirstChild(statName)if not stat thenstat = setupStat(leaderstats, statName)endstat.Value = valueend
Tích hợp Script Módul
Với cả PlayerData và Leaderboard 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> :
Trong Cửa sổ Explorer , mở script CoinService .
Thay thế mã hiện tại bằng mã sau đây:
-- Khởi tạo dịch vụ và biếnlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local ServerStorage = game:GetService("ServerStorage")-- Các mô-đunlocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COIN_KEY_NAME = PlayerData.COIN_KEY_NAMElocal COOLDOWN = 10local COIN_AMOUNT_TO_ADD = 1local function updatePlayerCoins(player, updateFunction)-- Cập nhật bảng xếp hạng tiền xulocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, updateFunction)-- Cập nhật bảng xếp hạng tiền xuLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)end-- Định nghĩa hệ thống trao tặng sự kiệnlocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Người chơi đã chạm vào một xucoin.Transparency = 1coin:SetAttribute("Enabled", false)updatePlayerCoins(player, function(oldCoinAmount)oldCoinAmount = oldCoinAmount or 0return oldCoinAmount + COIN_AMOUNT_TO_ADDend)task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Tùy chỉnh người lắng nghe sự kiệnfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)endGiải thích mãNhững thay đổi đến script gốc CoinService bao gồm:
- 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:
Ở thanh menu, hãy nhấp vào nút Chơi . Studio bắt đầu chế độ thử nghiệm.
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.