Tạo một nút Nâng cấp

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


Người chơi giờ đây có thể thu thập xu và mất chúng khi chúng chết, nhưng xu không làm bất cứ điều gì, và hầu hết thế giới trò chơi không truy cập được mà không có khả năng nhảy rất cao. Bộ phận này của hướng dẫn cho bạn cách hoàn thành logic cho trải n

Tạo nút Nâng cấp

Giao diện 2D trong Roblox thường được tạo bởi một loạt các thành phần GUI bên trong một container GUI. Trong trường hợp này, bạn chỉ cần một thành phần TextButton nói Nâng cấp nhảy (5 đồng xu) bên trong một container ScreenGui

Để tạo GUI:

  1. 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 1> ReplicatedStorage1> đều có thể truy cập được từ mỗi máy chủ Roblox của mỗi người chơi, nơi mà G
  2. Thêm một ScreenGUI đối tượng vào thư mục Instances .
  3. Chọn đối tượng ScreenGUI , sau đó trong cửa sổ Properties 1. Đặt Tên để JumpPurchaseGui . 2. Vô hiệu hóa ResetOnSpawn để đảm bảo GUI vẫn được cha mẹ khi họ hồi sinh.
  4. Trong cửa sổ Explorer , hãy nhúc một TextButton vào JumpPurchaseGui container, sau đó đổi tên button text thành 1> JumpButton1> .
  5. (Tùy chọn) Tùy chỉnh nhìn và vị trí 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 lên Nâng cấp nhảy (5 đồng xu) .
    • Đặt Kích thước chữ tính năng lên 25 .
    • Đặt AnchorPoint để 1, 1 và Vị trí để 1, 0,1, 0 để di chuyển nút đến góc phải dưới.

Bạn sẽ thêm nút vào GUI của người chơi sau đây trong hướng dẫn này, nhưng trước khi bạn làm điều đó, bạn cần phải xác định tất cả các luật và dữ liệu cần thiết cho nút hoạt động.

Định nghĩa Dữ liệu Quyền Nhảy

Hiện tại, chỉ số tiền được lưu cho mỗi người chơi trong modul PlayerData script. Bạn cũng cần phải lưu và cập nhật sức nhảy trong cùng một cách. Vì các hàm trong PlayerData là không chặ

Để cập nhật mô-đun PlayerData để lưu trữ sức nhảy:

  1. Trong cửa sổ Explorer , mở script PlayerData trong ServerStorage .

  2. Thay thế mã trong script với mẫu sau đây, which initializes a Jump value for each player alongside their existing Coins value:


    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_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

Cập nhật Dữ liệu Sức Nhảy

Bây giờ PlayerData có thể theo dõi sức nhảy, bạn cần phải tích hợp logic trên máy chủ để nâng cấp sức nhảy từ yêu cầu của khách người chơi.

Máy chủ và client có thể truyền thông qua bất kỳ Remote Events hoặc Remote Functions . Các sự kiện remote không tạo ra khi bị kích hoạt và phù hợp cho một cuộc trò chuyện một chiều. Các sự kiện remote được tạo cho đến khi nó nhận được

Để thực hiện nâng cấp nhảy:

  1. Trong cửa sổ Explorer , mở thư mục InstancesReplicatedStorage .

  2. Làm thế nào để tạo một RemoteFunction vào thư mục Instances, sau đó đổi tên đơn vị điều khiển để thành tăng sức mạnh nhảy . Bạn luôn tạo đơn vị điều khiển ở dưới 2> ReplicatedStorage2> bởi vì cả client và server đều

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. Trong cửa sổ Explorer , chọn StarterPlayer .

  4. Trong cửa sổ Tính chất , bật Giá trị nhảy nhân vật . Bởi mặc định, giá trị nhảy nhân vật của một nhân vật không định số lượng nhảy mà một nhân vật nhảy, vì vậy nó cần được bật.

  5. Trong cửa sổ Explorer , hãy nhúc một mô-đun mới vào ServerScriptService , sau đó đổi tên mô-đun thành JumpService . Skript này sẽ chứa logik cho nâng cấp nhảy.

  6. Thay thế mã mặc định bằng mã sau đây:


    -- Dịch Vụ
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- Các mô-đun
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Sự kiện
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAME
    local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
    local JUMP_POWER_INCREMENT = 30
    local JUMP_COIN_COST = 5
    local function updateJumpPower(player, updateFunction)
    -- Cập nhật bảng quyền nhảy
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- Cập nhật sức nhảy của người chơi
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Cập nhật bảng xếp hạng nhảy
    Leaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)
    end
    end
    local function onPurchaseJumpIncrease(player)
    local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)
    if coinAmount < JUMP_COIN_COST then
    return false
    end
    -- Tăng sức nhảy của người chơi
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Cập nhật bảng xếp hạng tiền xu
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Cập nhật bảng xếp hạng tiền xu
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Đặt lại sức nhảy của người chơi khi nhân vật được thêm
    updateJumpPower(player, function(_)
    return 0
    end)
    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 PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- Khởi tạo người chơi từ sự kiện PlayerAdded bình thường
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(function()
    onCharacterAdded(player)
    end)
    end
    local function onPlayerRemoved(player)
    updateJumpPower(player, function(_)
    return nil
    end)
    end
    IncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncrease
    Players.PlayerAdded:Connect(onPlayerAdded)
    Players.PlayerRemoving:Connect(onPlayerRemoved)

    Các mục tiếp theo mô tả mã chi tiết hơn.

    • Cập nhật dữ liệu quyền lực nhảy - updateJumpPower()

    • Xác minh yêu cầu máy chủ - onPurchaseJumpIncrease() kiểm tra người chơi có thực sự có số lượng tiền bạc cần thiết để mua nâng cấp. Tất cả các yêu cầu từ khách hàng đến máy chủ nên được 0> xác min

Thêm nút vào GUI người chơi

Một ScreenGui đối tượng chỉ xuất hiện trên màn hình nếu nó được kết nối với một người chơitượng PlayerGui để làm cho nó trở thành một đối người chơitrên màn hình. Bởi mặc định,

Để thêm nút vào GUI của người chơi khi họ tham gia:

  1. Trong cửa sổ Explorer , tạo một Script trong ReplicatedStorage .

  2. Chọn script, sau đó trong cửa sổ Tên tài sản ,

    1. Đặt Tên vào JumpButtonClickHandler .
    2. Đặt RunContext để Client . Điều này cho phép máy chủ chạy luôn màn hình này để tối ưu hóa giao thức mạng.
  3. Trong mã mở, thay thế mã mặc định bằng mã sau đây:


    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local playerGui = player.PlayerGui
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGui
    local jumpButton = jumpPurchaseGui.JumpButton
    local function onButtonClicked()
    local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)
    if not success then
    -- đã mua sẽ là thông điệp lỗi nếu thành công là sai
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- Thêm JumpPurchaseGui vào Gui của người chơi
    jumpPurchaseGui.Parent = playerGui

    Các mục tiếp theo mô tả mã chi tiết hơn.

    • Nhận các tham chiếu đến GUI và chức năng máy chủ - Các biến IncreaseJumpPowerFunction , jumpPurchaseGui và 0> jumpButton0> đều chứa các tham chiếu đến chức năng và GUI mà bạn sẽ cần sau đó.
    • Xác định trình xử lý sự kiện - onButtonClicked() định nghĩa logic cho khi người dùng nhấp vào nút nâng cấp. Nó sử dụng pcall() (gọi
    • Kết nối các thành phần đến nút - Sự kiện Activated 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ó được kích hoạt khi một nhấp chuột , 0> ch

Thử nghiệm

Bây giờ bạn nên có thể mua nâng cấp nhảy với đồng xu bằng nút nâng cấp. Để kiểm tra dự án:

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

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Nếu các script của bạn hoạt động đúng cách, một nút để mua quyền năng nhảy xuất hiện trên màn hình. Hãy thử nhấp vào nút trước khi bạn thu thập bất kỳ đồng xu nào để kiểm tra rằng nó không cho bạn thêm quyền năng nhảy, sau đó hãy thử thu thập một số đồng xu và xem nó có là

Bây giờ 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 xu. Thêm nhiều đồng xu nếu trò chơi cảm thấy quá chậm hoặc giảm đi các đồng xu và đặt chúng vào những nơi thách thức nếu nó cảm thấy quá dễ dàng và dễ dàng.