Script un pulsante di aggiornamento

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


I giocatori possono ora raccogliere monete e perderle quando muoiono, ma le monete non fanno nulla, e la maggior parte del mondo del gioco è inaccessibile senza la possibilità 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 raccolta di componenti GUI all'interno di un container GUI.In questo caso, hai bisogno solo di un componente TextButton di aggiornamento che dice Salto di aggiornamento (5 monete) all'interno di un container ScreenGui.

Per creare l'GUI or Intefaccia grafica utenteutente:

  1. Nella finestra Explorer , aggiungi una nuova cartella in ReplicatedStorage , quindi rinomina la cartella in Istanze .Qualsiasi oggetto in ReplicatedStorage è accessibile al client Roblox di ciascun Giocatore, dove vengono visualizzate le interfacce grafiche.
  2. Aggiungi un oggetto ScreenGui nella cartella Istanzie .
  3. Seleziona l'oggetto ScreenGui , quindi nella finestra Proprietà ,
    1. Imposta Nome a JumpPurchaseGui .
    2. Disabilita ResetOnSpawn per garantire che la GUI rimanga parentizzata al giocatore quando respawna.
  4. Nella finestra Explorer , inserisci un TextButton nel container JumpPurchaseGui , quindi rinomina il pulsante di testo in JumpButton .
  5. (Opzionale) Personalizza l'aspetto e la posizione del pulsante configurando le sue proprietà. Le semplici suggerimenti includono:
    • Imposta la proprietà Testo a Aumento del salto (5 monete) .
    • Imposta la proprietà TextSize a 25.
    • Imposta Punto di ancoraggio a 1, 1 e Posizione a {1, 0},{1, 0} per spostare il pulsante nell'angolo inferiore destra.

Aggiungerai il pulsante all'interfaccia grafica del Giocatorepiù tardi in questo Tutoriale, ma prima di farlo, devi definire tutta la logica e i dati necessari per far funzionare il pulsante.

Definisci i dati di potenza di salto

Attualmente, solo il conteggio delle monete viene memorizzato per ciascun giocatore nel script del modulo PlayerData .Devi anche archiviare e aggiornare la potenza di salto allo stesso modo.Poiché le funzioni in PlayerData non sono specifiche per i dati che vengono modificati, tutto ciò che è richiesto per archiviare la potenza di salto del giocatore è aggiungere una chiave Jump e inizializzare il suo valore iniziale in DEFAULT_PLAYER_DATA.

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

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

  2. Sostituisci il codice nel script con il seguente esempio, che inizializza un valore Jump per ogni giocatore insieme al loro valore esistente 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 da una Richiestadel client di un Giocatore.

Il server e il client possono comunicare attraverso either eventi remoti o funzioni remote.Gli eventi remoti non vengono generati quando vengono sparati e sono appropriati per la comunicazione unidirezionale.Le funzioni remote producono fino a quando non ricevono una risposta, che consente la comunicazione a due vie.In questo caso, il client deve sapere se il server ha aggiornato con successo la potenza di salto del Giocatore, quindi una funzione remota è l'ideale.

Per implementare l'Aggiornarmentodel salto:

  1. Nella finestra Explorer , apri la cartella Istanze in ReplicatedStorage .

  2. Inserisci un RemoteFunction nella cartella Istances , quindi rinomina la funzione remota in IncrementJumpPowerFunction .Crea sempre funzioni remote in ReplicatedStorage perché sia il client che il server debbano 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à , attiva 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 un nuovo script in ServerScriptService , quindi rinomina lo script in JumpService .Questo script conterrà la logica per i salti di aggiornamento.

  6. Sostituisci 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 della 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 classifica dei salti
    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 dei leader delle monete
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Ripristina la potenza 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 normale 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ù dettaglio.

    • Aggiorna i dati di potenza di salto - updateJumpPower() aggiorna la potenza di salto del giocatore e la classifica per fornire Riscontro/Replicavisivi.Questa funzione assomiglia al codice che danneggia i giocatori in Creare pericoli per i giocatori .Fornito un modello Character e Humanoid esiste per il giocatore che viene aggiornato, la funzione aggiorna la proprietà JumpPower con il nuovo valore memorizzato da PlayerData , aumentandolo di 30.Se vuoi che il tuo gioco duri leggermente più a lungo, puoi diminuire questo numero.

    • Valida le richieste del server - onPurchaseJumpIncrease() i primi controlli che il giocatore abbia effettivamente il numero di monete necessario per acquistare l'Aggiornarmento. Tutte le richieste da parte dei client al server dovrebbero essere validate per impedire agli attori cattivi di inviare richieste false e sfruttare la tua esperienza.

Aggiungi il pulsante alla GUI or Intefaccia grafica utentedel giocatore

Un oggetto A ScreenGui mostra solo sullo schermo se è parented a un oggetto del GiocatorePlayerGui .Per impostazione predefinita, questo contiene l'interfaccia utente del sistema come la finestra di chat.Ora devi creare uno script in ReplicatedStorage per copiare il pulsante di aggiornamento nella GUI di ciascun Giocatoree implementare il comportamento quando viene premuto.

Per aggiungere il pulsante alla GUI del Giocatorequando si uniscono:

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

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

    1. Imposta Nome a JumpButtonClickHandler .
    2. Imposta RunContext a Cliente . Questo dice al motore di eseguire sempre questo script sul client per ottimizzare la comunicazione di rete.
  3. Nell'open script, sostituisci 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
    -- acquistato 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ù dettaglio.

    • Ottieni riferimenti alla funzione GUI e al server - Le variabili IncreaseJumpPowerFunction , jumpPurchaseGui e jumpButton contengono riferimenti alla funzione e alla GUI che chiamerai più tardi.
    • Definisci il gestore eventi - onButtonClicked() definisce la logica per quando gli utenti fanno clic sul pulsante di aggiornamento.Usa pcall() (chiamata protetta) per invocare il RemoteFunction .Qualsiasi comunicazione client-server come questa richiede pcall() per gestire errori o problemi di connessione.
    • Connetti il gestore al pulsante - L'evento Activated è compatibile su tutte le piattaforme, incluso il Topo, or mouse as computer mouse, il touchscreen o il contesto del gamepad.Si attiva quando un clicca , tocca , o il pulsante del gamepad viene rilasciato.

Test di gioco

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

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

    Play button highlighted in Studio's playtesting options.
  2. Se i tuoi script funzionano correttamente, appare sullo schermo un pulsante per l'acquisto della potenza di salto.Prova a fare clic sul pulsante prima di raccogliere qualsiasi moneta per controllare che non ti assegna potere di salto aggiuntivo, quindi prova a raccogliere alcune monete e vedere se l'aggiornamento funziona quando clicchi 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 si sente troppo lento, o sottrai monete e mettile in posti impegnativi se si sente troppo veloce e facile.