Les joueurs peuvent désormais collecter des pièces et les perdre lorsqu'ils meurent, mais les pièces ne font rien, et la plupart du monde du jeu est inaccessible sans la capacité de sauter très haut.Cette section du tutoriel vous apprend à terminer la logique de votre expérience en ajoutant un bouton sur l'écran qui dépense des pièces pour augmenter la puissance de saut.
Créer le bouton de mise à niveau
Les interfaces 2D dans Roblox sont généralement composées d'une collection de composants GUI à l'intérieur d'un conteneur GUI.Dans ce cas, vous avez besoin d'un composant TextButton seulement qui dit Saut de mise à niveau (5 pièces) à l'intérieur d'un conteneur ScreenGui.
Pour créer l'interface interface utilisateur graphique:
- Dans la fenêtre Explorateur , ajoutez un nouveau dossier dans ReplicatedStorage , puis renommez le dossier en Instances .Tout objet dans ReplicatedStorage est accessible au client Roblox de chaque joueur, où les interfaces graphiques sont affichées.
- Ajoutez un objet ScreenGui dans le dossier Instances .
- Sélectionnez l'objet ScreenGui , puis dans la fenêtre Propriétés ,
- Définir nom à JumpPurchaseGui .
- Désactivez ResetOnSpawn pour vous assurer que l'interface utilisateur reste parentée au joueur lorsqu'il réapparaît.
- Dans la fenêtre Explorateur , insérez un bouton de texte dans le conteneur JumpPurchaseGui , puis renommez le bouton de texte en bouton de saut .
- (Facultatif) Personnalisez l'apparence et la position du bouton en configurant ses propriétés. Les suggestions simples incluent :
- Définissez la propriété Texte à Saut de mise à niveau (5 pièces) .
- Définissez la propriété Taille du texte à 25.
- Définir AnchorPoint à 1, 1 et Position à {1, 0},{1, 0} pour déplacer le bouton vers le coin inférieur droit.
Vous ajouterez le bouton à l'interface du joueur plus tard dans ce tutoriel, mais avant de le faire, vous devez définir toute la logique et les données requises pour que le bouton fonctionne.
Définir les données de puissance de saut
Actuellement, seul le nombre de pièces est stocké pour chaque joueur dans le script du module données du joueur .Vous devez également stocker et mettre à jour la puissance de saut de la même manière.Comme les fonctions dans PlayerData ne sont pas spécifiques aux données qui sont modifiées, tout ce qui est requis pour stocker la puissance de saut du joueur est d'ajouter une clé Jump et d'initialiser sa valeur initiale dans DEFAULT_PLAYER_DATA .
Pour mettre à jour le script du module PlayerData pour stocker la puissance de saut :
Dans la fenêtre Explorateur , ouvrez le script du module Données du joueur dans Stockage du serveur .
Remplacez le code dans le script par l'exemple suivant, qui initialise une valeur Jump pour chaque joueur aux côtés de sa valeur existante 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
Mise à jour des données de puissance de saut
Maintenant que PlayerData est capable de suivre la puissance de saut, vous devez implémenter une logique sur le serveur pour améliorer la puissance de saut à partir de la demande du client d'un joueur.
Le serveur et le client peuvent communiquer via either événements à distance ou fonctions à distance.Les événements à distance ne se produisent pas lorsqu'ils sont tirés et sont appropriés pour la communication unilatérale.Les fonctions à distance produisent jusqu'à ce qu'elles reçoivent une réponse, ce qui permet une communication en deux sens.Dans ce cas, le client doit savoir si le serveur a amélioré la puissance de saut du joueur avec succès, donc une fonction à distance est idéale.
Pour mettre en œuvre la mise à améliorationde saut :
Dans la fenêtre Explorateur , ouvrez le dossier Instances dans ReplicatedStorage .
Insérez une fonction à distance dans le dossier Instances , puis renommez la fonction à distance en fonction de saut de puissance .Vous créez toujours des fonctions à distance dans ReplicatedStorage car à la fois le client et le serveur doivent pouvoir y accéder.
Dans la fenêtre Explorateur , sélectionnez StarterPlayer .
Dans la fenêtre propriétés , activez la propriété CharacterUseJumpPower .Par défaut, la valeur de la puissance de saut d'un personnage ne définit pas le montant auquel un personnage saute, donc cela doit être activé.
Dans la fenêtre Explorateur , insérez un nouveau script dans ServerScriptService , puis renommez le script en JumpService .Ce script contiendra la logique pour les mises à niveau de saut.
Remplacez le code par défaut par le code suivant :
-- Serviceslocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Moduleurslocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Événementslocal 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)-- Mise à jour de la table de puissance de sautlocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Mise à jour de la puissance de saut des joueurslocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Mise à jour du classement des sautsLeaderboard.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-- Augmenter la puissance de saut du joueurupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Mise à jour de la table de pièceslocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Mise à jour du classement des leaders de piècesLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Réinitialiser la puissance de saut du joueur lorsque le personnage est ajoutéupdateJumpPower(player, function(_)return 0end)end-- Initialiser n'importe quel joueur ajouté avant de se connecter à l'événement PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Initialisation normale des joueurs à partir de l'événement 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)Explication du codeLes sections suivantes décrivent le code plus en détail.
Mise à jour des données de puissance de saut - updateJumpPower() met à jour la puissance de saut du joueur et du classement pour fournir un commentairesvisuel.Cette fonction ressemble au code qui endommage les joueurs dans Créer des dangers pour les joueurs .Fourni un modèle Character et Humanoid existe pour le joueur qui est amélioré, la fonction met à jour la propriété JumpPower avec la nouvelle valeur stockée par PlayerData , l'augmentant de 30.Si vous voulez que votre jeu dure légèrement plus longtemps, vous pouvez diminuer ce nombre.
Vérifier les demandes de serveur - onPurchaseJumpIncrease() d'abord vérifier que le joueur a effectivement le nombre de pièces requis pour acheter la mise à amélioration. Toutes les demandes des clients au serveur devraient être validées pour empêcher les acteurs malveillants de soumettre de fausses demandes et d'exploiter votre expérience.
Ajouter le bouton à l'interface interface utilisateur graphiquedu joueur
Un objet ScreenGui n'apparaît à l'écran que s'il est associé à un objet PlayerGui du joueur.Par défaut, cela contient l'interface graphique du système telle que la fenêtre de chat.Vous devez maintenant créer un script dans ReplicatedStorage pour copier le bouton de mise à niveau dans l'interface de chaque joueur et implémenter le comportement lorsqu'il est pressé.
Pour ajouter le bouton à l'interface du joueur lorsqu'il rejoint :
Dans la fenêtre Explorateur , créez un script dans ReplicatedStorage .
Sélectionnez le script, puis dans la fenêtre propriétés ,
- Définir nom à JumpButtonClickHandler .
- Définir RunContext à client . Cela indique au moteur d'exécuter toujours ce script sur le client pour optimiser la communication réseau.
Dans le script ouvert, remplacez le code par défaut par le code suivant :
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-- acheté sera le message d'erreur si la réussite est fausseerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- Ajoutez le JumpPurchaseGui au Gui du joueurjumpPurchaseGui.Parent = playerGuiExplication du codeLes sections suivantes décrivent le code plus en détail.
- Obtenir des références à la fonction GUI et au serveur - Les variables IncreaseJumpPowerFunction , jumpPurchaseGui et jumpButton contiennent des références à la fonction et à l'interface graphique qui appelle la fonction dont vous aurez besoin plus tard.
- Définir le gestionnaire d'événements - onButtonClicked() définit la logique pour lorsque les utilisateurs cliquent sur le bouton de mise à niveau.Il utilise pcall() (appel protégé) pour invoquer le RemoteFunction.Toute communication client-serveur comme celle-ci nécessite pcall() pour gérer les erreurs ou les problèmes de connexion.
- Relier le manipulateur au bouton - L'événement Activated est compatible sur toutes les plateformes, y compris la souris, le toucher ou le contexte du gamepad.Il se déclenche lorsqu'un clic , toucher , ou bouton de manette de jeu est libéré.
Test de jeu
Vous devriez maintenant être en mesure d'acheter des améliorations de saut pour des pièces en utilisant le bouton d'amélioration. Pour tester le projet :
Dans la barre d'outils, cliquez sur le bouton Jouer . Studio entre en mode de test de jeu.
Si vos scripts fonctionnent correctement, un bouton pour l'achat de la puissance de saut apparaît à l'écran.Essayez de cliquer sur le bouton avant de collecter des pièces pour vérifier qu'il ne vous attribue pas de puissance de saut supplémentaire, puis essayez de collecter quelques pièces et voyez si la mise à niveau fonctionne lorsque vous cliquez à nouveau.
Maintenant que le code est complet, essayez d'équilibrer le jeu en termes de quantité et de positions des pièces.Ajoutez plus de pièces si le jeu se sent trop lent, ou soustrayez des pièces et mettez-les dans des endroits difficiles s'il se sent trop rapide et facile.