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:
- 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.
- Aggiungi un oggetto ScreenGUI nel cartello Instances.
- Seleziona l'oggetto ScreenGUI e, nella finestra Proprietà ,
- Imposta Nome su JumpPurchaseGui .
- Disabilita ResetOnSpawn per assicurarti che la GUI rimanga親級在玩家 quando respawna.
- Nella finestra Explorer , inserisci un TextButton nel container JumpPurchaseGui , quindi rinomina il pulsante del testo in 1> JumpButton1> .
- (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:
Nella finestra Explorer, apri lo script del modulo PlayerData in ServerStorage.
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_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
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:
Nella finestra Explorer, apri la cartella Istantanee nella ReplicatedStorage.
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.
Nella finestra Explorer, seleziona StarterPlayer.
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.
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.
Remplace il codice predefinito con il seguente codice:
-- Servizilocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Modulilocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Eventilocal 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)-- Aggiorna la tabella di potenza di saltolocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Aggiorna la potenza di salto dei giocatorilocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Aggiorna la ClassificasaltoLeaderboard.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-- Aumenta la potenza di salto del GiocatoreupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Aggiorna la tabella delle monetelocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Aggiorna la classifica delle ClassificaLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Ripristina il potere di salto del Giocatorequando il personaggio viene aggiuntoupdateJumpPower(player, function(_)return 0end)end-- Inizializza qualsiasi giocatore aggiunto prima di connettersi all'evento PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Inizializzazione dei giocatori dall'evento 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)Spiegazione del codiceLe 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:
Nella finestra Explorer , crea uno Script in ReplicatedStorage .
Seleziona lo script, quindi nella finestra Proprietà ,
- Imposta Nome su JumpButtonClickHandler .
- Imposta RunContext su Client . Ciò consente al motore di eseguire sempre questo script sul client per ottimizzare la comunicazione di rete.
Nell'open script, replace il codice predefinito con il seguente codice:
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-- l'acquisto sarà il messaggio di errore se il successo è falsoerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- Aggiungi il JumpPurchaseGui alla GUI del GiocatorejumpPurchaseGui.Parent = playerGuiSpiegazione del codiceLe 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:
Nella barra dei menu, fai clic sul pulsante Gioca . Studio entra in modalità playtest.
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.