Người chơi bây giờ có thể thu thập tiền xu và mất chúng khi họ chết, nhưng tiền xu không làm gì cả, và hầu hết thế giới trò chơi không thể truy cập được nếu không có khả năng nhảy rất cao.Phần này của hướng dẫn dạy bạn cách hoàn thành logic cho trải nghiệm của bạn bằng cách thêm một nút trên màn hình chi tiêu tiền xu để tăng sức mạnh nhảy.
Tạo nút nâng cấp
Giao diện 2D trong Roblox thường được tạo thành từ một bộ sưu tập các thành phần GUI bên trong một thùng chứa GUI.Trong trường hợp này, bạn chỉ cần một thành phần TextButton nói rằng Nâng cấp Nhảy (5 Tiền xu) bên trong một thùng chứa ScreenGui.
Để tạo GUI:
- Trong cửa sổ Explorer , thêm một thư mục mới vào ReplicatedStorage , sau đó đổi tên thư mục thành Instances .Bất kỳ đối tượng nào trong ReplicatedStorage có thể truy cập vào khách hàng Roblox của mỗi người chơi, nơi GUIs được hiển thị.
- Thêm một đối tượng ScreenGui vào thư mục Instances .
- Chọn đối tượng ScreenGui , sau đó trong cửa sổ Tính năng ,
- Đặt Tên đến JumpPurchaseGui .
- Vô hiệu hóa ResetOnSpawn để đảm bảo GUI vẫn là cha của người chơi khi họ hồi sinh.
- Trong cửa sổ Explorer , hãy chèn một TextButton vào thùng chứa JumpPurchaseGui , sau đó đổi tên nút văn bản thành JumpButton .
- (Tùy chọn) Tùy chỉnh sự xuất hiện và vị trí của nút bằng cách cấu hình các thuộc tính của nó. Các gợi ý đơn giản bao gồm:
- Đặt thuộc tính Văn bản thành Nhảy nâng cấp (5 tiền xu) .
- Đặt thuộc tính Kích thước văn bản thành 25.
- Set AnchorPoint to 1, 1 và Vị trí to {1, 0},{1, 0} to di chuyển nút vào góc dưới bên phải.
Bạn sẽ thêm nút vào GUI của người chơi sau trong hướng dẫn này, nhưng trước khi bạn làm, bạn cần phải xác định tất cả các logic và dữ liệu cần thiết để nút hoạt động.
Xác định dữ liệu sức nhảy
Hiện tại, chỉ số tiền xu được lưu cho mỗi người chơi trong kịch bản module PlayerData .Bạn cũng cần lưu trữ và cập nhật sức nhảy theo cùng một cách.Bởi vì các chức năng trong PlayerData không cụ thể cho dữ liệu đang được thay đổi, tất cả những gì cần thiết để lưu sức mạnh nhảy của người chơi là thêm một chìa khóa Jump và khởi tạo giá trị ban đầu của nó trong DEFAULT_PLAYER_DATA .
Để cập nhật kịch bản mô-đun Dữ liệu người chơi để lưu sức nhảy:
Trong cửa sổ Explorer , mở trình kịch bản module PlayerData trong ServerStorage .
Thay thế mã trong kịch bản bằng các mẫu sau, mà khởi tạo một giá trị cho mỗi người chơi cùng với giá trị hiện có của họ:
local PlayerData = {}PlayerData.COIN_KEY_NAME = "Coins"PlayerData.JUMP_KEY_NAME = "Jump"local playerData = {--[[[userId: string] = {["Coins"] = coinAmount: number,["Jump"] = jumpPower: number}--]]}local DEFAULT_PLAYER_DATA = {[PlayerData.COIN_KEY_NAME] = 0,[PlayerData.JUMP_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 PlayerData
Cập nhật dữ liệu sức nhảy
Bây giờ PlayerData có thể theo dõi sức mạnh nhảy, bạn cần triển khai logic trên máy chủ để nâng cấp sức mạnh nhảy từ yêu cầu của khách hàng của người chơi.
Máy chủ và khách hàng có thể giao tiếp thông qua sự kiện remote hoặc chức năng remote.Sự kiện điều khiển từ xa không xảy ra khi bị kích hoạt và thích hợp cho giao tiếp một chiều.Chức năng remote hoạt động cho đến khi nhận được phản hồi, cho phép giao tiếp hai chiều.Trong trường hợp này, khách hàng cần biết liệu máy chủ đã nâng cấp thành công sức nhảy của người chơi hay không, do đó chức năng điều khiển từ xa là lý tưởng.
Để thực hiện nâng cấp nhảy:
Trong cửa sổ Explorer , mở thư mục Instances trong ReplicatedStorage .
Thêm một RemoteFunction vào thư mục Instances , sau đó đổi tên chức năng điều khiển từ xa thành IncreaseJumpPowerFunction .Bạn luôn tạo chức năng điều khiển từ xa trong ReplicatedStorage vì cả khách hàng và máy chủ đều phải có thể truy cập chúng.
Trong cửa sổ Explorer , chọn StarterPlayer .
Trong cửa sổ Tính năng , bật chức năng Sử dụng nhảy nhân vật tính năng.Mặc định, giá trị năng lượng nhảy của một nhân vật không xác định số tiền mà một nhân vật nhảy, vì vậy cần phải bật nó.
Trong cửa sổ Explorer , hãy chèn một kịch bản mới vào ServerScriptService , sau đó đổi tên kịch bản thành JumpService .Tập lệnh này sẽ chứa logic cho nhảy nâng cấp.
Thay thế mã mặc định bằng mã sau:
-- Dịch vụlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Mô-đunlocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Sự kiệnlocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAMElocal COIN_KEY_NAME = PlayerData.COIN_KEY_NAMElocal JUMP_POWER_INCREMENT = 30local JUMP_COIN_COST = 5local function updateJumpPower(player, updateFunction)-- Cập nhật bảng sức nhảylocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Cập nhật sức nhảy của người chơilocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Cập nhật bảng xếp hạng nhảyLeaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)endendlocal function onPurchaseJumpIncrease(player)local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)if coinAmount < JUMP_COIN_COST thenreturn falseend-- Tăng sức nhảy của người chơiupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Cập nhật bảng tiền xulocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Cập nhật bảng xếp hạng tiền xuLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Đặt lại sức nhảy của người chơi khi nhân vật được thêm vàoupdateJumpPower(player, function(_)return 0end)end-- Khởi tạo bất kỳ người chơi nào được thêm trước khi kết nối với sự kiện PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Khởi tạo bình thường của người chơi từ sự kiện PlayerAddedlocal function onPlayerAdded(player)player.CharacterAdded:Connect(function()onCharacterAdded(player)end)endlocal function onPlayerRemoved(player)updateJumpPower(player, function(_)return nilend)endIncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncreasePlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)Giải thích mãCác phần tiếp theo mô tả mã chi tiết hơn.
Cập nhật dữ liệu sức mạnh nhảy - updateJumpPower() cập nhật sức mạnh nhảy của người chơi và bảng xếp hạng để cung cấp phản hồi hình ảnh.Chức năng này giống như mã gây hại cho người chơi trong Tạo nguy hiểm cho người chơi .Cung cấp một mô hình Character và Humanoid tồn tại cho người chơi đang được nâng cấp, chức năng cập nhật thuộc tính JumpPower đến giá trị mới được lưu bởi PlayerData , tăng nó lên 30.Nếu bạn muốn trò chơi của mình kéo dài lâu hơn một chút, bạn có thể giảm số này.
Xác minh yêu cầu máy chủ - onPurchaseJumpIncrease() kiểm tra đầu tiên xem người chơi có thực sự có số tiền xu cần thiết để mua nâng cấp hay không. Tất cả các yêu cầu từ khách hàng đến máy chủ phải là được xác minh để ngăn chặn những kẻ xấu gửi yêu cầu giả mạo và lạm dụng trải nghiệm của bạn.
Thêm nút vào GUI của người chơi
Một đối tượng ScreenGui chỉ hiển thị trên màn hình nếu nó được gắn vào đối tượng PlayerGui của người chơi.Mặc định, nó bao gồm GUI hệ thống như cửa sổ trò chuyện.Bây giờ bạn cần tạo một kịch bản trong ReplicatedStorage để sao chép nút nâng cấp vào GUI của mỗi người chơi và thực hiện hành vi khi nó được nhấn.
Để thêm nút vào GUI của người chơi khi họ tham gia:
Trong cửa sổ Explorer , tạo một Tập lệnh trong ReplicatedStorage .
Chọn kịch bản, sau đó trong cửa sổ Tính năng ,
- Đặt Tên đến JumpButtonClickHandler .
- Thiết lập RunContext đến Client . Điều này cho thiết động cơ luôn chạy kịch bản này trên khách hàng để tối ưu hóa giao tiếp mạng.
Trong kịch bản mở, thay thế mã mặc định bằng mã sau:
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Players = game:GetService("Players")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuilocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGuilocal jumpButton = jumpPurchaseGui.JumpButtonlocal function onButtonClicked()local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)if not success then-- đã mua sẽ là tin nhắc lỗi nếu thành công là saierror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- Thêm JumpPurchaseGui vào Gui của người chơijumpPurchaseGui.Parent = playerGuiGiải thích mãCác phần tiếp theo mô tả mã chi tiết hơn.
- Nhận được tham chiếu đến chức năng GUI và máy chủ - Các biến IncreaseJumpPowerFunction , jumpPurchaseGui và jumpButton chứa tham chiếu đến chức năng và GUI mà bạn sẽ cần sau này.
- Xác định người xử lý sự kiện - onButtonClicked() xác định logic khi người dùng nhấp vào nút nâng cấp.Nó sử dụng pcall() (cuộc gọi bảo vệ) để kích hoạt RemoteFunction .Bất kỳ giao tiếp client-server như thế này yêu cầu pcall() để xử lý lỗi hoặc vấn đề kết nối.
- Kết nối xử lý với nút - Sự kiện Activated tương thích trên tất cả các nền tảng, bao gồm chuột, màn hình cảm ứng hoặc gamepad.Nó kích hoạt khi một nhấp vào , chạm vào hoặc nút gamepad được phát hành.
Thử nghiệm
Bạn nên bây giờ có thể mua nâng cấp nhảy cho tiền xu bằng nút nâng cấp. Để kiểm tra dự án:
Trong thanh công cụ, nhấp vào nút Chơi . Studio bước vào chế độ thử nghiệm.
Nếu các kịch bản của bạn hoạt động đúng cách, một nút để mua sức mạnh nhảy xuất hiện trên màn hình.Hãy thử nhấp vào nút trước khi thu thập bất kỳ tiền xu nào để kiểm tra xem nó không trao cho bạn thêm sức nhảy, sau đó thử thu thập một số tiền xu và xem nếu nâng cấp hoạt động khi bạn nhấp lại.
Bây giờ khi mã hoàn thành, hãy thử cân bằng trò chơi thông qua số lượng và vị trí của các đồng tiền.Thêm thêm tiền nếu trò chơi cảm thấy quá chậm, hoặc trừ tiền và đặt chúng vào những nơi thách thức nếu cảm thấy quá nhanh và dễ dàng.