Ce projet est un autre exemple d'utilisation des boucles de manière pratique.Pour ce pont, les joueurs toucheront un bouton pour rendre un pont marchable pendant un temps limité avant qu'il disparaisse.Pour créer une minuterie et afficher le temps restant à un joueur, vous utiliserez des boucles.
Configurer le projet
Ce pont peut être inclus dans n'importe quel projet de jeu avec des défis basés sur le mouvement, comme un obby.
Créer des parties
Trouvez un endroit pour construire un pont, comme une rivière ou un grand écart dans un obby. Créez trois parties ancrées comme ci-dessous.
- Affichage du temps
- Pont
- Pont de bouton
Lorsqu'il est inactif, le pont sera semi-transparent. Pour ce faire, sélectionnez le pont et modifiez ses propriétés.
- Transparence = 0,8
- Peut-Collisionner = Faux
Créer l'affichage du minuterie
Lors du passage du pont, les joueurs devront voir combien de secondes il reste avant que le pont disparaisse.L'une des façons d'afficher des images ou du texte consiste à ajouter un objet appelé une interface graphique de surface à une partie. Les interfaces graphiques de surface peuvent également être utilisées pour créer des signes en jeu, des barres de santé personnalisées et des systèmes d'inventaire.Ce tutoriel passera rapidement par là, mais plus d'informations peuvent être trouvées dans la section tutoriels.
Sélectionnez TimerDisplay et ajoutez un SurfaceGui . Ensuite, parenté au Surface Gui, ajoutez un TextLabel .
Sélectionnez l'interface utilisateur graphiquede surface. Dans les propriétés, apportez les modifications suivantes :
- Modifiez le visage pour que vous puissiez voir l'étiquette de texte sur le devant du minuterie où le joueur regarde.
Sélectionnez l'étiquette de texte. Dans les propriétés, apportez les modifications suivantes :
- Définir la taille à >.
- Définir TextScaled à vrai.
- Définir Texte à être vide. Le texte sera mis à jour en utilisant le script.
Configurer le script
Maintenant que le minuteur est en emplacement, créez un script pour contrôler le pont et afficher le nombre de compte à rebours aux joueurs.
Dans la partie pont, ajoutez un nouveau script nommé TimedBridge. Dans ce script, créez les variables suivantes.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- Combien de temps le pont restera solidelocal timerDuration = 5
Coder l'interaction tactile
Pour utiliser le pont, vous devrez créer deux fonctions.Une fonction rendra le pont marchable et affichera la minuterie.L'autre fonction écoutera si un joueur touche le bouton qui active le pont.
Créez une nouvelle fonction nommée startTimer() avec une déclaration d'impression à l'intérieur. Vous utiliserez la déclaration d'impression pour tester votre code.
local timerDuration = 5local function startTimer()print("Countdown started")endCodez une fonction nommée buttonPressed() pour vérifier si un humanoïde touche le bouton.La fonction doit accepter un paramètre de partTouched , puis avoir une déclaration if vide si un humanoïde est détecté dans cette partie.
local function startTimer()print("Countdown started")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendPour démarrer la minuterie, dans la déclaration if, appelez la fonction startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendÀ la fin de buttonPressed(), connectez la fonction buttonPressed() à l'événement du bouton Touched.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)Exécutez le projet. Touchez la partie et vérifiez dans la fenêtre d'exportation pour voir la déclaration d'impression.
Conseils de dépannage
À ce stade, si le pont ne fonctionne pas comme prévu, essayez l'une des options suivantes. Problème : Message d'erreur indiquant : "... is not a valid member of workspace" .
Dans le script TimedBridge, vérifiez que toutes les parties sont orthographiées exactement comme elles sont vues dans l'Explorer. Problème : Impossible de voir les parties.
Assurez-vous que les trois parties sont ancrées.
Vérifiez la propriété de transparence pour le pont.
Créer la minuterie
Chaque fois que les joueurs marchent sur le pont, startTimer() rendra le pont praticable et démarrera la minuterie.Une fois que le minuteur atteint 0, le pont deviendra impassable, provoquant la chute de toute personne qui n'est pas assez rapide.
Rendre le pont praticable
Pour commencer, le script devra rendre le pont solide, ou collidable, puis démarrer une minuterie jusqu'à ce qu'il devienne impassable.
Pour rendre le pont praticable, dans startTimer(), modifiez la propriété de transparence du pont à 0 (opaque) et la propriété CanCollide à vrai.
local function startTimer()-- Rendre le pont visible et praticablebridge.Transparency = 0bridge.CanCollide = trueendPour créer une minuterie qui compte à rebours, créez une boucle for avec les valeurs suivantes.
- Variable de contrôle : nommée count , définie à timerDuration .
- Fin : 0
- Incrément : -1
local function startTimer()-- Rendre le pont visible et praticablebridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPour montrer le minuteur aux joueurs, modifiez le texte dans timerText pour afficher le nombre de comptage en tapant timerText.Text = count.Chaque fois que la boucle for traverse une itération, elle affichera aux joueurs le prochain nombre dans le minuteur.
for count = timerDuration, 0, -1 dotimerText.Text = countendUtilisez une fonction wait de tâche pour faire fonctionner la boucle for une seule fois par seconde.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endExécutez le jeu. Lorsque vous touchez le bouton, le pont devrait apparaître et le minuterie commencera, puis se terminera.
Empêcher le pont de redémarrer
Remarquez cependant, si vous vous déplacez autour du bouton, le minuteur se réinitialisera à nouveau.
C'est parce que la boucle for est appelée à chaque fois que vous touchez le bouton et que la boucle for est démarrée depuis le début.Pour empêcher le minuteur de redémarrer en permanence, vous devrez ajouter un booléen, un type de variable, qui contrôlera si startTimer() peut ou non être appelé à nouveau. Les booleens sont écrits de la même manière que les autres variables, mais au lieu d'utiliser des nombres ou des chaînes, ils ne peuvent être définis que sur vrai ou faux.Dans cette situation, le script utilisera un booléen pour vérifier si le minuterie est actuellement en cours d'exécution avant de le démarrer.
En haut de votre script, sous vos variables, créez une variable nommée timerActive et définissez-la sur false puisque personne n'a encore appuyé sur le bouton.
local timerDuration = 5local timerActive = falselocal function startTimer()Pour vous assurer que le minuteur ne démarre que lorsque le timerActive boolean est faux, ajoutez une deuxième condition à la déclaration if dans buttonPressed() .
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPour empêcher startTimer() de s'exécuter à nouveau avant l'expiration du temps, définissez le booléen timerActive à vrai.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueDans la fonction startTimer(), après la boucle for, définissez le pont sur ses propriétés originales en changeant la transparence du pont en 0,8 et CanCollide en false.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- Pour la boucle qui compte à partir de la durée du timerfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Rendre le pont non marchablebridge.Transparency = 0.8bridge.CanCollide = falseendLa dernière chose pour réinitialiser le pont est de changer le timerText en une chaîne vide comme à l'origine.Ensuite, définissez le timerActive boolean à false.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseTestez et vérifiez pour vous assurer que le pont peut être utilisé plusieurs fois.
Terminer le script de pont horodaté complet
local bridge = script.Parent
-- Obtient le bouton tel qu'il est saisi dans l'Explorer
local button = workspace.ButtonBridge
-- Obtient la partie pour l'affichage
local timerPart = workspace.TimerDisplay
-- Obtient le texte qui affichera la minuterie
local timerText = timerPart.SurfaceGui.TextLabel
-- Combien de temps les joueurs doivent traverser le pont
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Pour la boucle qui compte à partir de la durée du timer
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Rendre le pont non marchable
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)
Sommaire
Les boucles peuvent être combinées avec différents moyens d'interaction pour créer des moments de jeu amusants.Dans ce tutoriel, un pont temporel est créé en utilisant une boucle while qui fonctionne comme un compte à rebours.Pendant le compte à rebours, les joueurs ont un temps limité pour se déplacer.