Scripta un pulsante di aggiornamento

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.


I giocatori ora possono raccogliere monete e perdere quando muoiono, ma le monete non fanno nulla, e la maggior parte del mondo di gioco è inaccessibile senza l'abilità di saltare molto in alto. Questa sezione del tutorial ti insegna come terminare la logica per la tua esperienza aggiungendo un pulsante sullo schermo che spende monete per aumentare la potenza di salto.

Crea il pulsante di aggiornamento

Le interfacce 2D in Roblox sono tipicamente costituite da una collezione di componenti GUI all'interno di un container GUI. In questo caso, hai solo bisogno di un TextButton componente che dice Aggiorna salto (5 monete) all'interno di un ScreenGui container.

Per creare l'interfaccia grafica utente:

  1. Nella finestra Explorer, aggiungi una nuova cartella in ReplicatedStorage, quindi rinomina la cartella in Instances . Qualsiasi oggetto in 2> ReplicatedStorage2> è accessibile al client Roblox di ciascun Giocatore, dove vengono visualizzate le GUI.
  2. Aggiungi un oggetto ScreenGUI nel cartello Instances.
  3. Seleziona l'oggetto ScreenGUI e, nella finestra Proprietà ,
    1. Imposta Nome su JumpPurchaseGui .
    2. Disabilita ResetOnSpawn per assicurarti che la GUI rimanga親級在玩家 quando respawna.
  4. Nella finestra Explorer , inserisci un TextButton nel container JumpPurchaseGui , quindi rinomina il pulsante del testo in 1> JumpButton1> .
  5. (Facoltativo) Personalizza l'aspetto e la posizione del pulsante configurando le sue proprietà. Esempi semplici includono:
    • Imposta la proprietà Testo su Aggiorna salto (5 monete) .
    • Imposta la proprietà TextSize su 25 .
    • Imposta AnchorPoint su 1, 1 e posiziona la posizione su 1, 0,1, 0 per spostare il pulsante verso l'angolo in basso a destra.

Aggiungerai il pulsante alla GUI del Giocatorein seguito a questo Tutoriale, ma prima di farlo, devi definire tutta la logica e i dati richiesti per il pulsante per funzionare.

Definisci i dati di potenza di salto

Attualmente, viene memorizzato solo il numero di monete per ciascun giocatore nel modulo PlayerData . È inoltre necessario memorizzare e aggiornare la potenza di salto nel modo stesso. Poiché le funzioni in PlayerData non sono specifiche per i dati che vengono cambiati, tutto ciò che è richiesto per memorizzare la potenza di salto del giocatore è aggiungere una chi

Per aggiornare lo script del modulo PlayerData per memorizzare la potenza di salto:

  1. Nella finestra Explorer, apri lo script del modulo PlayerData in ServerStorage.

  2. Rimpiazza il codice nel script con il seguente esempio, che inizializza un valore Jump per ciascun giocatore oltre al loro valore attuale Coins :


    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

Aggiorna i dati di potenza di salto

Ora che PlayerData è in grado di tracciare la potenza di salto, devi implementare la logica sul server per aggiornare la potenza di salto Richiestadal client del Giocatore.

Il server e il client possono comunicare tramite Eventi remoti o Funzioni remoti . Gli eventi remoti non si generano quando vengono attivati e sono appropriati per una comunicazione unidirezionale. Le funzioni remote generano fino a quando non ricevono una risposta, il che consente una comunicazione in direzione di due vie. In questo caso, il client deve sapere se il server ha aggiornato con successo la potenza di salto del Giocatore, qu

Per implementare l'Aggiornarmentodel salto:

  1. Nella finestra Explorer, apri la cartella Istantanee nella ReplicatedStorage.

  2. Inserisci una funzione remota nella cartella istanze, quindi rinomina la funzione remota in IncreJumpPowerFunction . Puoi sempre creare funzioni remote in 2> ReplicatedStorage2> in quanto sia il client che il server devono essere in grado di accedervi.

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. Nella finestra Explorer, seleziona StarterPlayer.

  4. Nella finestra Proprietà, abilita la proprietà CharacterUseJumpPower. Per impostazione predefinita, il valore della potenza di salto di un personaggio non definisce la quantità che un personaggio salta, quindi questo deve essere abilitato.

  5. Nella finestra Explorer, inserisci uno script nuovo in ServerScriptService, quindi rinomina lo script in JumpService. Questo script contiene la logica per le aggiornamenti di salto.

  6. Remplace il codice predefinito con il seguente codice:


    -- Servizi
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- Moduli
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Eventi
    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)
    -- Aggiorna la tabella di potenza di salto
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- Aggiorna la potenza di salto dei giocatori
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Aggiorna la Classificasalto
    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
    -- Aumenta la potenza di salto del Giocatore
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Aggiorna la tabella delle monete
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Aggiorna la classifica delle Classifica
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Ripristina il potere di salto del Giocatorequando il personaggio viene aggiunto
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Inizializza qualsiasi giocatore aggiunto prima di connettersi all'evento PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- Inizializzazione dei giocatori dall'evento PlayerAdded
    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)

    Le seguenti sezioni descrivono il codice in più dettagli.

    • Aggiorna i dati di potenza di salto - updateJumpPower() aggiorna il potere di salto del giocatore

    • Valida le richieste del server « - onPurchaseJumpIncrease() » prima controlla che il giocatore abbia effettivamente il numero di monete richieste per l'Aggiornarmento. Tutte le richieste « dei client al server devono essere 0> convalidate0> per prevenire gli attori dannosi che inviano richieste false e sfruttano la tua esperienza.

Aggiungi il pulsante alla GUI or Intefaccia grafica utentedel giocatore

Un oggetto ScreenGui mostra solo sullo schermo se è parented a un oggetto di un Giocatore's PlayerGui . Per impostazione predefinita, questo contiene il GUI del sistema come la finestra di chat. Ora devi creare uno script in ReplicatedStorage per copiare il pulsante di aggiornamento in ogni Giocatore's GUI e implementare il comportamento per quando viene premuto.

Per aggiungere il pulsante alla GUI del Giocatorequando si unisce:

  1. Nella finestra Explorer , crea uno Script in ReplicatedStorage .

  2. Seleziona lo script, quindi nella finestra Proprietà ,

    1. Imposta Nome su JumpButtonClickHandler .
    2. Imposta RunContext su Client . Ciò consente al motore di eseguire sempre questo script sul client per ottimizzare la comunicazione di rete.
  3. Nell'open script, replace il codice predefinito con il seguente codice:


    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
    -- l'acquisto sarà il messaggio di errore se il successo è falso
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- Aggiungi il JumpPurchaseGui alla GUI del Giocatore
    jumpPurchaseGui.Parent = playerGui

    Le seguenti sezioni descrivono il codice in più dettagli.

    • Ottieni riferimenti alla GUI e alla funzione del server - Le variabili IncreaseJumpPowerFunction , jumpPurchaseGui e 0> jumpButton0> contengono riferimenti alla funzione e alla GUI che chiama la funzione che ti servirà in seguito.
    • Definire l'evento hook - onButtonClicked() definisce la logica per quando gli utenti fanno clic sul pulsante di aggiornamento. Utilizza pcall() (chiamata protetta) per invocare il 0> Class.RemoteFunction0> . Qualsiasi com
    • Connetti il gestore al pulsante - L'evento Activated è compatibile su tutte le piattaforme, tra cui il Topo, or mouse as computer mouse, lo schermo touch o il gamepad. Si attiva quando viene rilasciato un clic , 0> tocco0> o 3>gamepad button 3>.

Playtest

Ora dovresti essere in grado di acquistare potenziamenti di salto per le monete utilizzando il pulsante di aggiornamento. Per testare il progetto:

  1. Nella barra dei menu, fai clic sul pulsante Gioca . Studio entra in modalità playtest.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Se i tuoi script stanno funzionando correttamente, un pulsante per l'acquisto di potere di salto appare sullo schermo. Prova a fare clic sul pulsante prima di raccogliere qualsiasi monete per assicurarti che non ti conceda potere di salto aggiuntivo, quindi prova a raccogliere alcune monete e vedi se l'aggiornamento funziona quando fai clic di nuovo.

Ora che il codice è completo, prova a bilanciare il gioco attraverso la quantità e le posizioni delle monete. Aggiungi più monete se il gioco sembra troppo lento, o sottrai monete e mettile in posti impegnativi se sembra troppo facile e facile.