Cela nous amène au dernier stade du game loop - acheter des améliorations. En permettant aux joueurs d'acheter des améliorations qui augmentent la taille de leur sac d'objets, ils peuvent récolter plus d'articles par voyage et gagner encore plus d'or.
Créer une boutique
Chaque boutique aura un bouton que les joueurs cliquent pour acheter un sac d'article plus grand. La boutique elle-même sera une partie avec un SurfaceGUI, un élément qui permet d'écrire du texte sur les parties.
Créer le signe
Dans l'espace de travail, créez un nouveau modèle nommé Boutique.
Dans la boutique, créez une nouvelle partie de bloc nommée BuyButton.
Dans BuyButton, ajoutez une nouvelle interface utilisateur de surface en cliquant sur + et en faisant défiler vers interface utilisateur graphique.
Dans la interface utilisateur graphiquede surface, ajoutez un nouveau TextLabel nommé BuyText. Une petite étiquette apparaîtra quelque part sur la pièce.
En fonction de la façon dont la partie a été fabriquée, l'étiquette peut être ailleurs. Si vous ne voyez pas le texte sur le côté que vous voulez, allez dans la SurfaceGUI et trouvez la propriété Visage. Modifiez cette propriété jusqu'à ce que vous voyiez l'étiquette de texte.
Modifier texte du signe
En ce moment, la balise de texte est vraiment petite et difficile à voir pour les joueurs. Il faut l'agrandir.
Dans les propriétés BuyText, cliquez sur la flèche à côté de Taille . Modifiez le Offset pour X (gauche et droite) et Y (haut et bas) à 0.
Changez la échelle de X et Y à 0,5 pour faire un carré.
Déplacez-vous dans les propriétés TextLabel et cliquez sur la flèche à gauche de AnchorPoint . Tapez 0.5 pour X et Y. Cela déplace une partie de votre étiquette hors de la vue, mais vous la positionnerez correctement à la prochaine.
Faites défiler dans les propriétés et ouvrez Position . Modifiez la taille de X et Y pour 0.5 afin que la boîte soit centrée au milieu.
Dans les propriétés BuyText, faites défiler vers le bas et modifiez Text par quelque chose de descriptif. Par instance: "Buy Larger Bag: 100 gold".
Vérifiez TextScaled pour être sur . Ceci met automatiquement votre texte à l'échelle pour qu'il tienne dans la boîte de modélisation.
Ajout d'un détecteur de clics
Les joueurs achèteront des articles en cliquant sur la boutique plutôt que de simplement la toucher. Le script utilisera un détecteur de clics pour déterminer si un joueur a cliqué sur le panneau de la boutique. Cliqueurs détecteurs sont des objets qui permettent aux utilisateurs d'interagir avec quelque chose dans l'environnement, comme ouvrir une porte.
Dans le bouton Acheter, ajoutez un ClickDetector.
Dans BuyButton, ajoutez un nouveau script nommé BuyScript et donnez-lui un commenterdescriptif.
Dans BuyScript, créez des variables pour stocker la partie du bouton et cliquez sur le détecteur.
-- Permets aux joueurs de cliquer sur un bouton pour acheter une amélioration qui augmente les espaceslocal buyButton = script.Parentlocal clickDetector = buyButton.ClickDetectorCréer une nouvelle fonction nommée giveUpgrade() qui obtient un paramètre nommé player . La fonction met à jour les espaces d'un joueur chaque fois qu'il clique sur le bouton.
local buyButton = script.Parentlocal clickDetector = buyButton.ClickDetectorlocal function giveUpgrade(player)endAprès la fonction, vous pouvez connecter l'événement MouseClick du détecteur de clics à la fonction giveUpgrade().
local function giveUpgrade(player)endclickDetector.MouseClick:Connect(giveUpgrade)Ajoutez une déclaration d'impression dans giveUpgrade() pour tester la fonction.
local function giveUpgrade(player)print("Someone clicked the button.")endJouez votre projet. Cliquez sur le bouton et vérifiez que vous voyez le texte dans la fenêtre de sortie.
Conseils de débogage
Problème : Vous ne pouvez pas cliquer sur le bouton ou un curseur de souris n'apparaît pas sur le bouton.
- Assurez-vous que l'objet ClickDetector est un enfant de la partie que vous essayez de cliquer.
- Vérifiez que votre personnage est assez proche du bouton. Ou, assurez-vous que l'outil n'est pas équipé.
Acheter des améliorations
Avec un bouton fonctionnel, il est temps d'ajouter du code à giveUpgrade pour retirer l'or d'un joueur en échange d'un sac amélioré.
Ajouter des variables d'amélioration
Chaque amélioration aura deux variables : le coût de l'amélioration et le nombre d'espaces qu'elle a.
Dans BuyScript, sous local clickDetector, créez deux variables :
- newSpace : Nombre d'espaces supplémentaires qu'une amélioration ajoute lorsqu'elle est achetée.
- upgradeCost : le coût d'une seule amélioration
-- Variables pour la mise à améliorationlocal newSpaces = 10local upgradeCost = 100
Accorder des améliorations
Avant de vendre le joueur l'amélioration, vous devez vérifier s'il a assez d'argent. S'ils le font, vous ajouterez à leur montant maximum d'espaces.
Dans giveUpgrade(), tapez les éléments suivants pour obtenir les statistiques du joueur afin que vous puissiez accéder à leurs variables d'or et d'espace.
local function giveUpgrade(player)print("Someone clicked the button")-- Obtenez le classement du joueur pour obtenir d'autres IntValueslocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtient l'argent et l'espace du joueur pour faire des modificationslocal playerGold = playerStats:FindFirstChild("Gold")local playerSpaces = playerStats:FindFirstChild("Spaces")endendAprès avoir écrit les variables pour les espaces, créez une if statement pour vérifier si la valeur de playerGold est plus ou égale au coût de mise à niveau.
local function giveUpgrade(player)local playerStats = player:FindFirstChild("leaderstats")if playerStats thenlocal playerGold = playerStats:FindFirstChild("Gold")local playerSpaces = playerStats:FindFirstChild("Spaces")-- Vérifie si le joueur a assez d'argent pour financer la mise à niveauif playerGold and playerSpaces and playerGold.Value >= upgradeCost thenendendendDans la déclaration if, soustrayez le coût de l'amélioration du joueur à l'or du joueur.
if playerGold and playerSpaces and playerGold.Value >= upgradeCost then-- Soustrayez le coût de l'itemdu montant du joueurplayerGold.Value -= upgradeCostendSur la prochaine ligne, ajoutez le nombre d'esaces actuels du joueur ainsi que les nouveaux espaces accordés par améliorationà niveau.
if playerGold and playerSpaces and playerGold.Value >= upgradeCost thenplayerGold.Value -= upgradeCostplayerSpaces.Value += newSpacesendJouez votre projet et vérifiez le classement pour vérifier si la mise à niveau des espaces a fonctionné.
Conseils de débogage
À ce stade, les améliorations ne fonctionnent pas comme prévu, essayez l'une des suivantes ci-dessous.
- Assurez-vous que tout dans le () de FindFirstChild() a des citations sur les deux côtés, comme **** .
- Vérifiez que chaque chaîne dans FindFirstChild est exactement la même que le nom de IntValue dans le script PlayerSetup. Par exemple, si votre code utilise des rubis comme monnaie, vous devriez avoir FindFirstChild("Rubies") .
- Assurez-vous que giveUpgrade() est au-dessus de clickDetector.MouseClick.
Compléter le script BuyScript
Une version finie du script peut être référencée ci-dessous.
-- Permets aux joueurs de cliquer sur un bouton pour acheter une amélioration qui augmente MaxSpaces
local buyButton = script.Parent
local clickDetector = buyButton.ClickDetector
-- Variables pour la mise à amélioration
local newSpaces = 10
local upgradeCost = 100
local function giveUpgrade(player)
print("Someone clicked the button")
-- Obtenez le classement du joueur pour obtenir d'autres IntValues
local playerStats = player:FindFirstChild("leaderstats")
if playerStats then
-- Obtient l'argent et l'espace du joueur pour faire des modifications
local playerGold = playerStats:FindFirstChild("Gold")
local playerSpaces = playerStats:FindFirstChild("Spaces")
-- Vérifie si le joueur a assez d'argent pour financer la mise à niveau
if playerGold and playerSpaces and playerGold.Value >= upgradeCost then
print("Player can buy item")
-- Soustrayez le coût de l'itemdu montant du joueur
playerGold.Value -= upgradeCost
playerSpaces.Value += newSpaces
end
end
end
clickDetector.MouseClick:Connect(giveUpgrade)