Script un bouton de mise à niveau

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.


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:

  1. 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.
  2. Ajoutez un objet ScreenGui dans le dossier Instances .
  3. Sélectionnez l'objet ScreenGui , puis dans la fenêtre Propriétés ,
    1. Définir nom à JumpPurchaseGui .
    2. Désactivez ResetOnSpawn pour vous assurer que l'interface utilisateur reste parentée au joueur lorsqu'il réapparaît.
  4. 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 .
  5. (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 :

  1. Dans la fenêtre Explorateur , ouvrez le script du module Données du joueur dans Stockage du serveur .

  2. 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_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

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 :

  1. Dans la fenêtre Explorateur , ouvrez le dossier Instances dans ReplicatedStorage .

  2. 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.

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. Dans la fenêtre Explorateur , sélectionnez StarterPlayer .

  4. 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é.

  5. 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.

  6. Remplacez le code par défaut par le code suivant :


    -- Services
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- Moduleurs
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Événements
    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)
    -- Mise à jour de la table de puissance de saut
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- Mise à jour de la puissance de saut des joueurs
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Mise à jour du classement des sauts
    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
    -- Augmenter la puissance de saut du joueur
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Mise à jour de la table de pièces
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Mise à jour du classement des leaders de pièces
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Réinitialiser la puissance de saut du joueur lorsque le personnage est ajouté
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Initialiser n'importe quel joueur ajouté avant de se connecter à l'événement PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- Initialisation normale des joueurs à partir de l'événement 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)

    Les 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 :

  1. Dans la fenêtre Explorateur , créez un script dans ReplicatedStorage .

  2. Sélectionnez le script, puis dans la fenêtre propriétés ,

    1. Définir nom à JumpButtonClickHandler .
    2. Définir RunContext à client . Cela indique au moteur d'exécuter toujours ce script sur le client pour optimiser la communication réseau.
  3. 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.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
    -- acheté sera le message d'erreur si la réussite est fausse
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- Ajoutez le JumpPurchaseGui au Gui du joueur
    jumpPurchaseGui.Parent = playerGui

    Les 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 :

  1. Dans la barre d'outils, cliquez sur le bouton Jouer . Studio entre en mode de test de jeu.

    Play button highlighted in Studio's playtesting options.
  2. 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.