Les joueurs peuvent maintenant collecter des pièces et les perdre quand 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 comment terminer la logique pour 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 d'interface graphique à l'intérieur d'un conteneur GUI. Dans ce cas, vous n'avez besoin qu'un composant d'interface TextButton qui dit Mettre à niveau le saut (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 2> ReplicatedStorage2> est accessible à chaque joueurRoblox, où les GUI sont affichées.
- Ajoutez un ScreenGUI objet dans le dossier Instances.
- Sélectionnez l'objet ScreenGUI, puis dans la Fenêtre propriétés,
- Définir nom à JumpPurchaseGui .
- Désactivez Réinitialiser lors du génération pour assurer que la GUI reste parenté 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 1> bouton de saut1>.
- (Facultatif) Personnalisez l'apparence et la position du bouton en configurant ses propriétés. Des suggestions simples incluent :
- Définir la propriété texte à améliorer le saut (5 pièces) .
- Définir 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 graphique 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 saut
Actuellement, seul le nombre de pièces est stocké pour chaque joueur dans le script de module PlayerData . Vous devez également stocker et mettre à jour la puissance de saut dans la même façon. Parce que les fonctions dans PlayerData ne sont pas spécifiques aux données qui sont modifiées, tout ce qui est nécessaire pour stocker la puissance de saut du joueur est d'ajouter une clé
Pour mettre à jour le script du module PlayerData pour stocker la puissance de saut :
Dans la fenêtre Explorateur , ouvrez le script de module PlayerData dans ServerStorage .
Remplacez le code dans le script par l'exemple suivant, qui initialise une valeur Jump pour chaque joueur côté de leur valeur Coins actuelle :
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
Mettre à jour les données de saut
Maintenant que PlayerData est capable de suivre la puissance de saut, vous devez implémenter la logique sur le serveur pour améliorer la puissance de saut d'un client.
Le serveur et le client peuvent communiquer via l'un des événements à distance ou fonctions à distance. Les événements à distance ne se produisent pas lorsqu'ils sont activés et sont appropriés pour la communication unidirectionnelle. Les fonctions à distance ne produisent pas jusqu'à ce qu'ils reçoivent une réponse, ce qui permet une communication à deux voies. Dans ce cas, le client doit savoir si le serveur a réussi à améliorer la puissance de saut du joueur,
Pour implémenter la mise à améliorationde saut :
Dans la fenêtre Explorateur , ouvrez le dossier Instances dans ReplicatedStorage .
Insérez une fonctions Remote dans le dossier Instances , puis renommez la fonction de téléportation à 1> AugmenterJumpPowerFunction1>. Vous créez toujours des fonctions de téléportation dans 4> ReplicatedStorage 4> car le client et le serveur doivent tous les deux pouvoir y acc
Dans la fenêtre Explorateur , sélectionnez StarterPlayer .
Dans la Propriétés fenêtre, activez la propriété CharacterUseJumpPower . Par défaut, la valeur de saut d'un personnage ne définit pas le montant qu'un personnage saute, donc ceci 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 améliorations 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")-- Moduleslocal 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 la puissance de saut des joueurslocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Mettre à jour le classementsde sautLeaderboard.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)-- Mettre à jour la table des pièceslocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Mettre à jour le classementsdes 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-- Initialisez n'importe quel joueur ajouté avant de vous connecter à l'événement PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Initialisation normale des joueurs 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.
Mettre à jour les données de saut du joueur - updateJumpPower() m
valider les demandes du serveur « - onPurchaseJumpIncrease() les premiers tests que le joueur a en fait le nombre de pièces requises pour acheter l'amélioration. Toutes les demandes « des clients au serveur devraient être 0> valides0> pour empêcher les mauvais acteurs de soumettre de fausses demandes et d'exploiter votre expérience.
Ajouter le bouton à la interface utilisateur graphiquedu joueur
Un objet ScreenGui ne montre que sur l'écran s'il est parenté à l'objet PlayerGui d'un joueur. Par défaut, cela contient la GUI du système telle que la fenêtre de chat. Vous devez maintenant créer un script dans ReplicatedStorage pour copier le bouton d'amélioration dans chaque GUI du joueur et implémenter le comportement pour lorsqu'
Pour ajouter le bouton à l'interface graphique 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-- l'achat 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)-- Ajouter le JumpPurchaseGui au Gui du joueurjumpPurchaseGui.Parent = playerGuiExplication du codeLes sections suivantes décrivent le code plus en détail.
- Obtenez des références à la GUI et à la fonction du serveur - Les variables IncreaseJumpPowerFunction , jumpPurchaseGui et 0> jumpButton0> contiennent des références à la fonction et à l'interface graphique que vous aurez besoin plus tard.
- Définir le gestionnaire d'événements - onButtonClicked() définit la logique pour quand les utilisateurs cliquent sur le bouton de mise à niveau. Il utilise pcall() (appel protecté) pour invoquer le 0> Class.RemoteFunction0> . Toute communication
- Connectez le gestionnaire au bouton - L'événement Activated est compatible sur toutes les plates-formes, y compris la souris, l'écran tactile ou le gamepad context. Il se déclenche lorsqu'un clic , 0> touch0> ou 3> bouton gamepad 3> est libéré.
Test de jeu
Vous devriez maintenant pouvoir acheter des améliorations de saut pour les pièces en utilisant le bouton de mise à niveau. Pour tester le projet :
Dans la barre de menu, cliquez sur le bouton Jouer . Studio entre en mode playtest.
Si vos scripts fonctionnent correctement, un bouton pour acheter de la puissance de saut apparaît sur l'écran. Essayez de cliquer sur le bouton avant de collecter des pièces pour vérifier que vous n'avez pas reçu de puissance de saut supplémentaire, puis essayez de collecter des pièces et voyez si l'amélioration fonctionne lorsque vous cliquez à nouveau.
Maintenant que le code est terminé, essayez de balancer le jeu par le volume et les positions des pièces. Ajoutez plus de pièces si le jeu se sent trop lent, ou soustraignez des pièces et mettez-les dans des endroits difficiles si cela se sent trop facile et rapide.